jQuery JSON 投稿を作成しており、PartialView を HTML として返したいと考えています。私のコントローラーでは、PartialView を HTML にする必要があります。
いくつかの例を見つけましたが、それらのほとんどは BaseController に関係しています。私のプロジェクトでは、BaseController を使用できません。代わりにコントローラーで使用できる拡張機能が必要です。
いくつかのコードを見て、例を見つけましたが、使用に問題があります。現在使用しているコントローラーを渡す方法がわかりません。
[HttpPost]
public ActionResult HtmlJsonTryout(/*passing values*/)
{
//code here......
if (first.CartID == 0)
{
var viewData = m_cartViewDataFactory.Create();
var miniCart = ControllerExtensionsHelper.PartialViewToString("HERE I NEED TO PASS CONTROLLER RIGHT?", "_FullCart", viewData);
var cart = PartialView("_CartSum", viewData);
this.Response.ContentType = "application/json";
return Json(new
{
Status = "OK",
MiniCart = miniCart,
Cart = cart
});
}
}
public static class ControllerExtensionsHelper
{
public static string PartialViewToString(this Controller controller)
{
return controller.PartialViewToString(null, null);
}
public static string RenderPartialViewToString(this Controller controller, string viewName)
{
return controller.PartialViewToString(viewName, null);
}
public static string RenderPartialViewToString(this Controller controller, object model)
{
return controller.PartialViewToString(null, model);
}
public static string PartialViewToString(this Controller controller, string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
}
controller.ViewData.Model = model;
using (StringWriter stringWriter = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, stringWriter);
viewResult.View.Render(viewContext, stringWriter);
return stringWriter.GetStringBuilder().ToString();
}
}
}