簡體   English   中英

當部分視圖包含渲染操作時,將ASP.Net MVC部分視圖渲染為字符串

[英]Render an ASP.Net MVC partial view to a string when the partial view contains a render action

在過去的幾天里,我遇到了一個錯誤,一直困擾着我。 我有一些代碼需要HttpContext和ViewResult並將視圖呈現到字符串中。 在引入包含@ Html.RenderAction調用的視圖之前,這段代碼似乎運行良好。 當將RenderAction調用添加到視圖時,我收到一條錯誤消息,指出與該動作綁定的控制器需要一個無參數的構造函數。 但是,添加這樣的構造函數並不能改善這種情況。 執行渲染的代碼如下:

public static string Render(HttpContextBase httpContext, ViewResultBase partialViewResult)
{
    var routeData = new RouteData();
    routeData.Values.Add("controller", "mock");

    var context = new ControllerContext(httpContext, routeData, new EmptyController());

    var view = partialViewResult.View;
    if (view == null)
    {
        result = partialViewResult.ViewEngineCollection.FindPartialView(context, partialViewResult.ViewName);

        view = result.View;
    }

    using (var sw = new StringWriter())
    {
        var viewContext = new ViewContext(context, view, partialViewResult.ViewData,
                                      partialViewResult.TempData, sw);
        view.Render(viewContext, sw);
        if (result != null)
            result.ViewEngine.ReleaseView(context, view);

        return sw.ToString();
    }
}

在嘗試渲染的視圖中,我嘗試了:

@{ Html.RenderAction(FormController.Directive(Model.FormModel)); }

@Html.Action(FormController.Directive(Model.FormModel))

兩者都導致相同的錯誤消息。

An error occurred when trying to create a controller of type 'FormController'. Make sure that the controller has a parameterless public constructor.

完全刪除操作調用將消除錯誤消息。

控制器中的動作如下所示:

public virtual ActionResult Directive(FormModel model)
{
    model.MyProperty = "test";

    return View("FormView", model);
}

任何建議將不勝感激。

更新

我將這個問題歸結為與Unity有某種聯系。 當我添加一個空的構造函數並刪除所有其他構造函數時,渲染代碼將起作用。 其他構造函數包括對通過Unity路由的接口的引用。 我將需要了解有關Unity的更多信息。 那里可能有一些功能正在替換或破壞控制器的默認構造函數。

Html.Action聲明應類似於以下內容:

@Html.Action("Directive", "Form", new { model = Model.FormModel })

/ 將默認的構造函數添加到您的“ FormModel”類中,它將解決問題 /

public void FormModel()
    {

    }

如前所述,該錯誤與我們對Unity IOC的使用有關。 使用依賴注入的控制器時,這似乎是MVC的已知問題。 在CodeProject上有一個建議的修復程序: http : //www.codeproject.com/Articles/99361/How-To-Use-Unity-Container-In-ASP-NET-MVC-Framewor

我會嘗試一下,希望它可以為我們解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM