Asp.Net Mvc 2可重复使用的部件?

时间:2009-10-13 12:35:47

标签: asp.net-mvc asp.net-mvc-2 castle-monorail

我想知道,是否有相当于Asp.Net MVC的Monorail View组件?

我想要做的是渲染一些依赖于类的复杂UI,所以说我们在List视图中,我想将一个对象传递给这个ViewComponent等价物,并且它将把对象作为参数和为我渲染复杂的UI,允许我在视图中执行其他操作。在Asp.Net MVC中最好的方法是什么?

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

  • 期货中的Html.RenderAction
  • 子控制器

但是我想知道在这个特定场景中是否还有其他东西或者是否比另一个更好

5 个答案:

答案 0 :(得分:2)

RenderPartial怎么样?这似乎符合法案。

<% Html.RenderPartial("MyPartialView", Model.Data); %>

答案 1 :(得分:2)

您可以使用

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

看看这个page

答案 2 :(得分:0)

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

答案 3 :(得分: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以呈现部分内容。很多可能性都在你的控制之下; - )

答案 4 :(得分:0)

或许你想要Templated Helpers