我有一些有趣的东西,我想我可以添加。我开发了一个只加载一次完整视图的应用程序。从那时起,它仅使用 ajax 与服务器通信。它只需要加载一页(我的原因在这里并不重要)。有趣的部分是,我有一个特殊的需求,即返回一些要在 javascript 中操作的数据和要显示的部分视图。我可以把它分成两个对两个单独的动作方法的调用,但我决定做一些更有趣的事情。
看看这个:
public JsonResult MyJsonObject(string someData)
{
return Json(new { SomeData = someData, PartialView = RenderPartialViewToString("JsonPartialView", null) }, JsonRequestBehavior.AllowGet);
}
你可能会问什么是 RenderPartialViewToString()?这是这里的小块酷:
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();
}
}
我没有对此进行任何性能测试,所以我不确定它是否会比为 JsonResult 调用一个操作方法和为 ParticalViewResult 调用一个操作方法产生更多或更少的开销,但我仍然认为它很酷。它只是将部分视图序列化为一个字符串,并将其与 Json 作为参数之一一起发送。然后我使用 JQuery 来获取该参数并将其放入适当的 DOM 节点中 :)
让我知道您对我的混合动力车的看法!