Ich habe etwas Interessantes, von dem ich dachte, ich könnte es hinzufügen. Ich habe eine Anwendung entwickelt, die nur einmal eine vollständige Ansicht geladen hat. Ab diesem Zeitpunkt wurde nur noch mit Ajax an den Server zurückgemeldet. Es musste immer nur eine Seite geladen werden (mein Grund dafür ist hier unwichtig). Der interessante Teil besteht darin, dass ich ein besonderes Bedürfnis hatte, einige Daten zurückzugeben, die im Javascript bearbeitet werden sollen, UND eine Teilansicht anzuzeigen. Ich hätte dies in zwei Aufrufe zu zwei getrennten Aktionsmethoden aufteilen können, aber ich entschied mich für etwas, das ein bisschen mehr Spaß macht.
Hör zu:
public JsonResult MyJsonObject(string someData)
{
return Json(new { SomeData = someData, PartialView = RenderPartialViewToString("JsonPartialView", null) }, JsonRequestBehavior.AllowGet);
}
Was ist RenderPartialViewToString (), das Sie fragen könnten? Es ist dieses kleine Nugget der Kühle hier:
protected string RenderPartialViewToString(string viewName, object model)
{
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
Ich habe diesbezüglich keine Leistungstests durchgeführt, daher bin ich mir nicht sicher, ob dies mehr oder weniger Aufwand verursacht als das Aufrufen einer Aktionsmethode für das JsonResult und einer für das ParticalViewResult, aber ich fand es trotzdem ziemlich cool. Es serialisiert nur eine Teilansicht in eine Zeichenfolge und sendet sie zusammen mit dem Json als einen seiner Parameter. Ich benutze dann JQuery, um diesen Parameter zu nehmen und ihn in den entsprechenden DOM-Knoten zu stecken :)
Lassen Sie mich wissen, was Sie von meinem Hybrid halten!