我正在使用组件架构构建ASP.Net MVC 2应用程序。有两种不同类型的组件:基本组件,它们具有呈现局部视图的关联控制器操作,以及布局组件,它们呈现其所有子组件(基本组件或在某种布局中再次布局。
这是我的通用 RenderComponent()操作方法,它采用组件ID并呈现相应的视图:
[ChildActionOnly]
public ActionResult RenderComponent(int id)
{
ComponentRepository repository = new ComponentRepository();
Component component = repository.GetComponent(id);
if (component.ControllerName != null && component.ViewName != null)
{
// render elementary component
return PartialView("Elementary", component);
}
else
{
// render layout
return PartialView(component.Layout.ViewName, component);
}
}
Elementary.ascx 呈现一个基本组成部分:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Models.Component>" %>
<% Html.RenderAction(Model.ViewName, Model.ControllerName); %>
目前唯一的现有布局是 VerticalLayout.ascx :
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Models.Component>" %>
<%
foreach (var child in Model.ChildComponents()) {
%>
<div class="layout-container">
<% Html.RenderAction("RenderComponent", "Core", child.ID); %>
</div>
<%
}
%>
问题:
当我尝试使用三个关联的基本子组件呈现示例布局组件时,页面将无法呈现。一些调试显示以下问题:
RenderComponent(5)
呈现布局视图。
为了在布局中呈现第一个子组件,在视图中调用Html.RenderAction("RenderComponent", "Core", 1)
。进一步说,我发现实际上RenderComponent(5)
被调用而不是RenderComponent(1)
!!
这显然会导致布局视图呈现自身的无限循环。
为什么会这样?我该如何解决?我的分层组件架构是否与ASP.Net MVC不兼容?你将如何在ASP.Net MVC中构建这样一个系统?
答案 0 :(得分:0)
好的,我的不好......当然,它必须是VerticalLayout.ascx中的<% Html.RenderAction("RenderComponent", "Core", new { id = child.ID}); %>
。