当ASP.Net MVC部分视图包含渲染操作时,将该部分视图渲染为字符串
本文关键字:视图 该部 字符串 操作 Net ASP 包含渲 MVC | 更新日期: 2023-09-27 18:20:24
我有一个错误,过去几天一直在运行。我有一些代码,它采用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路由的接口的引用。我需要了解更多关于团结的信息。那里可能有一些功能正在替换或破坏我的控制器的默认构造函数。
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
我会尝试一下,希望它能为我们纠正问题。