Sto cercando di iniziare con le chiamate Ajax di ASP.NET MVC.
controller:
public class AjaxTestController : Controller { // // GET: /AjaxTest/ public ActionResult Index() { return View(); } public ActionResult FirstAjax() { return Json("chamara", JsonRequestBehavior.AllowGet); } }
Vista:
FirstAjax $(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'); } });
Devo solo stampare un avviso con il metodo del controller che restituisce i dati. Sopra il codice basta stampare “chamara” sulla mia vista. Un avviso non sta sparando.
AGGIORNARE
Ho modificato il mio controller come di seguito e inizia a funzionare. Non ho un’idea chiara del perché funzioni ora. Qualcuno per favore spiega. Il parametro “a” non è correlato l’ho aggiunto perché non posso aggiungere due metodi con lo stesso nome e parametri del metodo. Penso che questa potrebbe non essere la soluzione ma il suo funzionamento
public class AjaxTestController : Controller { // // GET: /AjaxTest/ [HttpGet] public ActionResult FirstAjax() { return View(); } [HttpPost] public ActionResult FirstAjax(string a) { return Json("chamara", JsonRequestBehavior.AllowGet); } }
Dopo l’aggiornamento che hai fatto,
Prima avevi restituito JSON al browser senza eseguire il rendering di alcun codice HTML. Ora ha una visualizzazione HTML resa in cui può ottenere i dati JSON.
Non puoi rendere direttamente a JSON i suoi semplici dati non HTML.
Rimuovi l’attributo dei dati poiché non stai POSTING
nulla al server (il tuo controller non si aspetta alcun parametro).
E nel tuo metodo AJAX puoi usare Razor
e usare @Url.Action
piuttosto che una stringa statica:
$.ajax({ url: '@Url.Action("FirstAjax", "AjaxTest")', contentType: "application/json; charset=utf-8", dataType: "json", success: successFunc, error: errorFunc });
Dal tuo aggiornamento:
$.ajax({ type: "POST", url: '@Url.Action("FirstAjax", "AjaxTest")', contentType: "application/json; charset=utf-8", data: { a: "testing" }, dataType: "json", success: function() { alert('Success'); }, error: errorFunc });
Usa un razor per modificare dynamicmente il tuo URL chiamando la tua azione in questo modo:
$.ajax({ type: "POST", url: '@Url.Action("ActionName", "ControllerName")', contentType: "application/json; charset=utf-8", data: { data: "yourdata" }, dataType: "json", success: function(recData) { alert('Success'); }, error: function() { alert('A error'); } });
È per la tua domanda UPDATE.
Dal momento che non puoi avere due metodi con lo stesso nome e firma devi usare l’attributo ActionName:
AGGIORNARE:
[HttpGet] public ActionResult FirstAjax() { Some Code--Some Code---Some Code return View(); } [HttpPost] [ActionName("FirstAjax")] public ActionResult FirstAjaxPost() { Some Code--Some Code---Some Code return View(); }
E fai riferimento a questo link per ulteriori riferimenti su come un metodo diventa un’azione. Ottimo riferimento però.
Per prima cosa non c’è bisogno di avere due versioni differenti di librerie jquery in una pagina, “1.9.1” o “2.0.0” è sufficiente per far funzionare le chiamate ajax.
Ecco il codice del tuo controller:
public ActionResult Index() { return View(); } public ActionResult FirstAjax(string a) { return Json("chamara", JsonRequestBehavior.AllowGet); }
Ecco come dovrebbe apparire la tua vista:
Se hai solo bisogno di premere il metodo C # nella tua chiamata Ajax devi solo passare due tipi di materia e url se la tua richiesta è richiesta, devi solo specificare l’url. si prega di seguire il codice qui sotto sta funzionando bene.
C# Code [HttpGet] public ActionResult FirstAjax() { return Json("chamara", JsonRequestBehavior.AllowGet); } Java Script Code if Get Request $.ajax({ url: 'home/FirstAjax', success: function(responce){ alert(responce.data)}, error: function(responce){ alert(responce.data)} }); Java Script Code if Post Request and also [HttpGet] to [HttpPost] $.ajax({ url: 'home/FirstAjax', type:'POST', success: function(responce){ alert(responce)}, error: function(responce){ alert(responce)} });
Nota: se si utilizza FirstAjax nello stesso controller in cui il View Controller non è necessario il nome del controller in url. come url: 'FirstAjax',
Vista;
$.ajax({ type: 'GET', cache: false, url: '/Login/Method', dataType: 'json', data: { }, error: function () { }, success: function (result) { alert("success") } });
Metodo del controller;
public JsonResult Method() { return Json(new JsonResult() { Data = "Result" }, JsonRequestBehavior.AllowGet); }
invece di url: serviceURL,
utilizzare
url: '< %= serviceURL%>',
e stai passando 2 parametri a SuccessFunc?
function successFunc(data) { alert(data); }
Aggiungi “JsonValueProviderFactory” in global.asax:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); ValueProviderFactories.Factories.Add(new JsonValueProviderFactory()); }