Sto cercando di creare azioni di controller che restituiranno JSON o html parziale a seconda di un parametro. Qual è il modo migliore per ottenere il risultato restituito a una pagina MVC in modo asincrono?
Nel vostro metodo d'azione, restituite Json(oggetto) per restituire JSON alla vostra pagina.
public ActionResult SomeActionMethod() {
return Json(new {foo="bar", baz="Blech"});
}
Poi basta chiamare il metodo d'azione usando Ajax. Si potrebbe usare uno dei metodi helper della ViewPage come
<%= Ajax.ActionLink("SomeActionMethod", new AjaxOptions {OnSuccess="somemethod"}) %>
SomeMethod sarebbe un metodo javascript che poi valuta l'oggetto Json restituito.
Se vuoi restituire una semplice stringa, puoi semplicemente usare il ContentResult:
public ActionResult SomeActionMethod() {
return Content("hello world!");
}
ContentResult di default restituisce un text/plain come contentType.
Questo è sovraccaricabile, quindi si può anche fare:
return Content("<xml>This is poorly formatted xml.</xml>", "text/xml");
Un altro bel modo di trattare i dati JSON è usare la funzione JQuery getJSON. Potete chiamare la funzione
public ActionResult SomeActionMethod(int id)
{
return Json(new {foo="bar", baz="Blech"});
}
dal metodo jquery getJSON semplicemente...
$.getJSON("../SomeActionMethod", { id: someId },
function(data) {
alert(data.foo);
alert(data.baz);
}
);
Per rispondere all'altra metà della domanda, potete chiamare:
return PartialView("viewname");
quando volete restituire HTML parziale. Dovrete solo trovare un modo per decidere se la richiesta vuole JSON o HTML, forse basandosi su una parte/parametro dell'URL.