2

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();
        }
    }
}
4

1 に答える 1

2

拡張メソッドを正しく使用していません。拡張するクラスのインスタンスで拡張メソッドを呼び出します。拡張メソッドに関するドキュメントをお読みください:

[HttpPost]
public ActionResult HtmlJsonTryout(int amount)
{
    if (first.CartID == 0)
    {               
        var viewData = m_cartViewDataFactory.Create();
        string miniCart = this.PartialViewToString("_FullCart", viewData);
        string cart = this.PartialViewToString("_CartSum", viewData);

        return Json(new
        {
            Status = "OK",
            MiniCart = miniCart,
            Cart = cart
        });
    }
}
于 2012-05-31T07:11:35.473 に答える