Estou tentando começar com chamadas ASP.NET MVC Ajax.
Controlador:
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
public ActionResult Index()
{
return View();
}
public ActionResult FirstAjax()
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
Visão:
<head runat="server">
<title>FirstAjax</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var serviceURL = '/AjaxTest/FirstAjax';
$.ajax({
type: "POST",
url: serviceURL,
data: param = "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
alert(data);
}
function errorFunc() {
alert('error');
}
});
</script>
</head>
Só preciso imprimir um alerta com os dados de retorno do método do controlador. Código acima apenas imprima "chamara" na minha visão. Um alerta não está disparando.
ATUALIZAR
Modifiquei meu controlador conforme abaixo e ele começou a funcionar. Não tenho uma ideia clara de por que está funcionando agora. Alguém, por favor, explique. O parâmetro "a" não está relacionado, eu o adicionei porque não posso adicionar dois métodos com o mesmo nome de método e parâmetros. Acho que esta pode não ser a solução, mas está funcionando
public class AjaxTestController : Controller
{
//
// GET: /AjaxTest/
[HttpGet]
public ActionResult FirstAjax()
{
return View();
}
[HttpPost]
public ActionResult FirstAjax(string a)
{
return Json("chamara", JsonRequestBehavior.AllowGet);
}
}
c#
jquery
asp.net
asp.net-mvc
asp.net-mvc-2
chamara
fonte
fonte
{"name":"chamara"}
. em seguida, tente ler comodata['name']
Respostas:
Depois de fazer a atualização,
Anteriormente, você estava apenas retornando JSON ao navegador sem renderizar nenhum HTML. Agora ele tem uma visualização HTML renderizada de onde pode obter seus dados JSON.
Você não pode renderizar diretamente JSON seus dados simples, não HTML.
fonte
Remova o atributo de dados, pois você não representa
POSTING
nada para o servidor (Seu controlador não espera nenhum parâmetro).E em seu método AJAX você pode usar
Razor
e usar em@Url.Action
vez de uma string estática:De sua atualização:
fonte
Use um Razor para alterar dinamicamente seu URL chamando sua ação assim:
fonte
Em primeiro lugar, não há necessidade de ter duas versões diferentes de bibliotecas jquery em uma página, "1.9.1" ou "2.0.0" é suficiente para fazer as chamadas ajax funcionarem.
Aqui está o seu código de controlador:
Esta é a aparência de sua visualização:
fonte
Se você só precisa acionar o Método C # em sua chamada Ajax, você só precisa passar dois tipos de matéria e url se sua solicitação for get, então você só precisa especificar apenas a url. siga o código abaixo, ele está funcionando bem.
Código C #:
Código Java Script se Get Request
Código Java Script se Post Request e também [HttpGet] para [HttpPost]
Nota: Se você usar o FirstAjax no mesmo controlador em que seu View Controller, não há necessidade do nome do controlador no url. gostar
url: 'FirstAjax',
fonte
É para sua pergunta sobre o UPDATE.
Visto que você não pode ter dois métodos com o mesmo nome e assinatura, você deve usar o atributo ActionName:
ATUALIZAR:
E consulte este link para obter mais referências sobre como um método se torna uma ação. Muito boa referência, entretanto.
fonte
Visão;
Método do controlador;
fonte
em vez de
url: serviceURL,
usare você está passando 2 parâmetros para successFunc?
fonte
Adicione "JsonValueProviderFactory" em global.asax:
fonte