Usando $ .ajax ou $ .post para chamar o método MVC 5 Controller
Estou tentando configurar o que deve ser uma chamada muito simples de uma página MVC para um controlador usando JavaScript. Este é o meu controlador:
Imports System.Web.Mvc
Namespace Controllers
Public Class DataController
Inherits Controller
Function Index() As ActionResult
Return View()
End Function
<HttpPost>
Function SaveData(payload As String) As String
If payload IsNot Nothing AndAlso payload.Length > 0 Then
Return "Good"
Else
Return "Bad"
End If
End Function
End Class
End Namespace
esta é a minha visualização (Index.vbhtml):
@Code
ViewData("Title") = "Index"
End Code
<h2>Index</h2>
@Code
Html.BeginForm()
@:<a href="#" onclick="SaveData();">Save Data</a>
Html.EndForm()
End Code
e este é o meu JavaScript (incluído no arquivo _layout.vbhtml):
function SaveData() {
var payload = "TEST_DATA_GOES_HERE";
// Calls controller correctly but data is null
$.ajax({
url: "/Data/SaveData",
type: "POST",
processData: false,
dataType: String,
data: { payload: payload }
})
.done(function () { alert('Application saved.'); })
.fail(function () { alert('Application failed to save.'); });
// Returns a 500 error
$.post("/Data/SaveData", { Payload: payload }, function (data) { alert('Application saved. ' + data); }, "String");
// Calls controller correctly but data is null
$.post("/Data/SaveData", payload, function () { alert('Application saved.' + data); }, "String");
}
Tudo se conecta perfeitamente durante a depuração, mas opayload
variável chega comoNothing
noSaveData
função. Eu tentei usar$.post
mas com problemas semelhantes e todas as referências que encontrei para usar qualquer um dos métodos, basta presumir que funcionará pela primeira vez sem erros e sem dicas de solução de problemas.
Como você configura o$.ajax
ou$.post
funções para chamar corretamente um controlador e passar uma string simples?