Asp.Net Mvc 2 многоразовых деталей?

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

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

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

  • Html.RenderAction в будущем
  • дки

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

13.10.2009 12:35:47
5 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

2
13.10.2009 18:12:33
Сан, Viewcomponents поддерживает двухпроходную обработку (методы Initialize и Render, которая позволяет), которая не будет достигнута при вызове renderview. Кроме того, по моему мнению, они не служат одной и той же цели, я нахожу концепции совершенно разными. Я использую свои собственные обертки для jquery ui, и это выглядит так в моей разметке: <datepicker id = "someid" date = "view.SomeDate" /> Я думаю, это выглядело бы очень прикольно с RenderAction с asp.net mvc, использование UserControl (или System.Web.Control) позволит повторно использовать небольшие компоненты, а также компоненты представления, но это решение привязано к представлению WebForm.
smoothdeveloper 24.01.2010 03:32:59

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

0
13.10.2009 12:51:14
Я не думаю, что они являются опцией, так как это сгенерирует код для каждого представления, но я хочу, чтобы "complexUI" помещался один раз в одно представление
roundcrisis 13.10.2009 13:04:07

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

<% Html.RenderPartial("MyPartialView", Model.Data); %>
2
13.10.2009 14:40:53
Спасибо, это еще один способ, но вы можете найти более мощный
roundcrisis 14.10.2009 16:39:38

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;
      }
   }
}

Обратите внимание на рекурсию. Конечно, вам нужно будет добавить поддержку коллекций и т. Д. ... внутри переключателя (PropertyType) ... но это не так сложно. Вы также можете проверить UIHint для свойства, чтобы отобразить частичные значения. Много возможностей и все под вашим контролем ;-)

0
13.10.2009 18:40:12

Или, может быть, вы хотите Templated Helpers ?

0
13.10.2009 18:14:31