asp.net-mvc – 是否有与ASP.Net MVC框架相同的单轨视图组件?

我在Monorail中构建的一些较大的应用程序中大量使用了
View Components – ASP.Net MVC中对于视图组件的等效方法是什么,它可以支持部分等等? 最佳答案 实际上,您有几个选项可以在ASP.NET MVC中创建等效的ViewComponent,具体取决于组件的复杂程度.我使用这两种方法,这是我所知道的选项中的mvc-ish.

1:
最简单的方法是创建一个ViewUserControl并使用Html.RenderPartial和帮助器显示它. ViewUserControl是一个简单的标记,没有后备控制器(如果你愿意,我想你可以放一个代码隐藏文件).
(可选)您可以在调用RenderPartial时将模型对象或整个ViewData字典传递给视图,如下所示:

<% Html.RenderPartial("TopBar", model); %>

“TopBar”是一个ascx页面.这适用于任何地方,母版页和普通视图中.

2:
如果您希望组件具有更复杂的逻辑或访问数据源,IoC等,那么您可以使用Html.RenderAction,它是Microsoft.Web.Mvc程序集中的扩展方法.我在mvccontrib发行版中使用它.它的工作方式如下,您需要创建一个包含所需逻辑的普通控制器,然后创建一些视图,所有这些都成为您的组件,例如:

public class AboutComponentController : Controller {
public IRepository Repository{ get; set; }

public ActionResult Detail() {
    var lastEvent = Repository.FindAll<Auditoria>().FirstOrDefault();
    return View(lastEvent);
}

}

请注意我如何引用一个IRepository,它将注入IoC(在我的情况下是Windsor),我可以做任何普通控制器都可以做的事情.

现在,在要使用组件的任何页面(主页或普通页面)中,导入Microsoft.Web.Mvc并使用适当的参数调用Html.RenderAction.这将创建一个mini mvc管道,用于创建控制器,解析视图等,就像Monorail ViewComponent一样.我更喜欢使用基于lambda的方法变体,如下所示:

<% Html.RenderAction<AboutComponentController>(x => x.Detail("a message"));%>

不幸的是,传递参数的唯一方法是使用方法调用本身,而调用本身在控制器中必须是唯一的.仍然需要一些类似于ViewComponent的工作.

我不在组件的视图中使用masterpages或layouts,因为它们本身就是组合元素.

请记住,在使用Webforms视图引擎时,如果您希望在代码块中使用Model变量时具有智能感知,则可以使用强类型视图.

这样做的好处在于您可以将视图引擎与这些方法混合使用,我通常在nvelocity中创建组件并在aspx页面中显示它们等.

我现在可能存在缓存部分视图的问题,但到目前为止我还没有遇到任何问题.我确信还有其他选项(比如mvccontrib中的子控制器),但这对于简单的情况通常就足够了.当然你可以在你的aspx视图页面中使用普通的ASP.net组件,但那会欺骗吗?呵呵.我希望它有所帮助.

点赞