1

我想知道,Asp.Net MVC 是否有等效的 Monorail View 组件?

我要做的是渲染一些依赖于类的复杂 UI,所以假设我们在一个列表视图中,我想将一个对象传递给这个 ViewComponent 等效项,并且它将对象作为参数并渲染复杂的我的 UI 允许我在视图中做其他事情。在 Asp.Net MVC 中做到这一点的最佳方法是什么?

由于这是一个复杂的 UI,我宁愿只编写一次,因此模板并不是我真正想要的方式,因为这意味着我将遇到可维护性问题。
我看到的一些选项(我即将开始尝试)是:

  • 未来的 Html.RenderAction
  • 子控制器

但是,我想知道在这种特定情况下是否还有其他东西,或者一个比另一个更好

4

5 回答 5

2

RenderPartial 呢?这似乎符合要求。

<% Html.RenderPartial("MyPartialView", Model.Data); %>
于 2009-10-13T14:40:53.257 回答
2

您可以使用

<% Html.RenderAction<ProductController>(c => c.RenderProductResults()); %>

看看这个页面

于 2009-10-13T18:12:33.140 回答
0

请查看 MVC 2 预览中的 DisplayTemplates 和 EditorTemplates。

于 2009-10-13T12:51:14.793 回答
0

MvcContrib InputBuilder 有类似的东西。

虽然你可以自己写:

public static string RenderInput(this HtmlHelper html, object data, string prefix)
{
   foreach (var prop in data.GetType().GetProperties())
   {
      object val = prop.GetValue(data, new object[0]);
      string name = prefix + prop.Name;
      switch (prop.PropertyType.Name)
      {
          case "String": html.TextBox(name, val); break;
          case "Guid": html.Hidden(name, val); break;
          default: html.RenderInput(val, name + "."); break;
      }
   }
}

注意递归。当然,您必须在 switch(PropertyType) 中添加集合支持等...但这并不难。您还可以检查属性上的 UIHint 以呈现局部。很多可能性,都在您的控制之下;-)

于 2009-10-13T18:01:18.873 回答
0

或者,也许您想要模板化助手

于 2009-10-13T18:14:31.390 回答