Asp.Net Mvc 2 многоразовых деталей? - PullRequest
1 голос
/ 13 октября 2009

Интересно, есть ли эквивалент компонентов Monorail View для Asp.Net MVC?

То, что я пытаюсь сделать, это визуализировать некоторый сложный пользовательский интерфейс, который зависит от класса, так что, скажем, мы находимся в представлении списка, я хочу передать объект в этот эквивалент ViewComponent и что он будет принимать объект в качестве параметра сделать сложный интерфейс для меня, позволяя мне делать другие вещи в представлении. Что было бы лучшим способом сделать это в Asp.Net MVC?

Поскольку это сложный пользовательский интерфейс, я бы предпочел написать его один раз, поэтому шаблоны на самом деле не такие, как я хотел бы, поскольку это будет означать, что у меня возникнут проблемы с удобством сопровождения.
Некоторые варианты, которые я видел (и я собираюсь начать пробовать):

  • Html.RenderAction на фьючерсы
  • дка

Однако я хотел бы знать, есть ли что-то еще или одно лучше другого для этого конкретного сценария

Ответы [ 5 ]

2 голосов
/ 13 октября 2009

Вы можете использовать

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

Посмотрите на эту страницу

2 голосов
/ 13 октября 2009

А как насчет RenderPartial? Это, кажется, отвечает всем требованиям.

<% Html.RenderPartial("MyPartialView", Model.Data); %>
0 голосов
/ 13 октября 2009

Или, может быть, вы хотите Шаблонные помощники ?

0 голосов
/ 13 октября 2009

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 для свойства, чтобы отобразить частичные значения. Много возможностей и все под вашим контролем; -)

0 голосов
/ 13 октября 2009

Пожалуйста, посмотрите на DisplayTemplates, а также EditorTemplates в предварительном просмотре MVC 2.

...