json オブジェクトで Html を返すソリューションを使用しています。それを行うことに問題がある場合は、私に知らせてください。これが私が行った方法です。
ビューの一部をレンダリングするコントローラー拡張(このソリューションには含まれていますが、RenderViewToString は使用されていません)。これは、私が信用していないカスタマイズされたバージョンと一致していないように見えるさまざまな回答にさまざまな形で見られます。
namespace System.Web.Mvc
{
using System.IO;
public static class MvcControllerExtension
{
public static string RenderPartialViewToString(this Controller controller, string viewName = null, object model = null)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
}
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
public static string RenderViewToString(this Controller controller, string viewName = null, object model = null, string masterName = null)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
}
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, masterName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
}
JsonResult を返すコントローラ アクションで
public JsonResult _DisplayByFoo(int catId)
{
var myRealModel = new MyRealModel(catId);
// .... omitted the construction of MyRealModel
var jsonModel = new JsonModel(myRealModel);
jsonModel.Html = this.RenderPartialViewToString("_Display", myRealModel);
return Json(jsonModel);
}
json オブジェクトには、挿入モードを決定するのに役立つ他のプロパティも含めます。
Jsで; Jsonアクションへの私のAjaxCallの後。OnSuccess メソッドを実行します。このメソッドは、他のロジックとは別に、次のことを行います。
$("#" + targetId).append(MyJson.Html);