Effettuare una semplice chiamata Ajax al controller in asp.net mvc

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,

  1. la prima chiamata l’azione FirstAjax con la richiesta HttpGet predefinita e il rendering della vista Html vuota. (Prima non lo avevi)
  2. in seguito al caricamento degli elementi DOM di tale vista, la chiamata Ajax viene triggersta e viene visualizzato un avviso.

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()); }