Asp.Net Mvc 2 многоразовые части?
-
21-09-2019 - |
Вопрос
Интересно, существует ли эквивалент компонентов 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 в свойстве для визуализации частичных элементов.Множество возможностей и все под вашим контролем ;-)