asp.net-mvc - 是否有与 ASP.Net MVC 框架的 Monorail View 组件等效的组件?

标签 asp.net-mvc castle-monorail castle

我大量使用View Components在我在 Monorail 中构建的一些较大的应用程序中 - 在 ASP.Net MVC 中,可以支持部分等的 View 组件的等效方法是什么?

最佳答案

实际上,您有几个选项可以在 ASP.NET MVC 中创建等效的 ViewComponent,具体取决于组件的复杂性。我使用这两种方法,它们是我所知道的更多 mvc-ish 选项。

1:
最简单的事情是创建一个 ViewUserControl 并使用 Html.RenderPartial 和 helper 显示它。 ViewUserControl 是一个没有后备 Controller 的简单标记(我认为您可以根据需要放置一个代码隐藏文件)。
或者,您可以在调用 RenderPartial 时将模型对象或整个 ViewData 字典传递给 View ,如下所示:

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

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

2:
如果您希望您的组件具有更复杂的逻辑或访问数据源、IoC 等,那么您可以使用 Html.RenderAction,它是 Microsoft.Web.Mvc 程序集中的扩展方法。我在 mvccontrib 发行版中使用它。它的工作原理是这样的,你需要创建一个包含所有你需要的逻辑的普通 Controller ,然后创建一些 View ,所有这些东西都成为你的组件,例如:
public class AboutComponentController : Controller {
public IRepository Repository{ get; set; }

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

}

请注意我是如何引用 IRepository 的,该 IRepository 将被注入(inject) IoC(在我的例子中是温莎),我可以做任何普通 Controller 会做的事情。

现在,在要使用组件的任何页面(主页面或普通页面)中,导入 Microsoft.Web.Mvc 并使用适当的参数调用 Html.RenderAction。这将创建一个迷你 mvc 管道,用于创建 Controller 、解析 View 等,就像 Monorail ViewComponent 一样。我更喜欢使用该方法的基于 lambda 的变体,如下所示:
<% Html.RenderAction<AboutComponentController>(x => x.Detail("a message"));%>

不幸的是,传递参数的唯一方法是使用方法调用本身,而这又在 Controller 中必须是唯一的。仍然需要一些工作来类似于 ViewComponent。

我不在组件 View 中使用母版页或布局,因为它们本身就是组合元素。

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

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

我现在可能存在缓存部分 View 的问题,但到目前为止我还没有遇到任何问题。我确信还有其他选项(例如 mvccontrib 中的子 Controller ),但这对于简单的情况通常就足够了。当然,您可以在您的 aspx View 页面中使用普通的 ASP.net 组件,但那是作弊,对吧?呵呵。我希望它有所帮助。

关于asp.net-mvc - 是否有与 ASP.Net MVC 框架的 Monorail View 组件等效的组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/810187/

相关文章:

asp.net-mvc - asp.net mvc 4 将表单从站点发送到电子邮件

jquery - Controller 的 Ajax 数据参数始终为空

c# - 如何正确地将拦截器添加到没有 ILogger 类型的字段或属性的组件

caSTLe-activerecord - ActiveRecord 是不好的做法吗?

asp.net-mvc - 集成测试 ASP.NET MVC 应用程序

asp.net-mvc - ASP.NET MVC - 部分 View 架构问题

unit-testing - 测试中的整个单轨操作调用

javascript - 我可以在 CaSTLe MonoRails/NVelocity 中以编程方式将标签附加到 <head> 中吗?

asp.net - 关于单轨的反馈

.NET:CaSTLe 项目的现状如何?