Вопрос

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

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

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

  • Html.RenderAction в будущем
  • Субконтроллер

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

У 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 в свойстве для визуализации частичных элементов.Множество возможностей и все под вашим контролем ;-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top