asp.net mvc 3 и генерация динамического представления - PullRequest
2 голосов
/ 24 июня 2011

Я работаю над реализацией экрана пользовательского профиля.

Это довольно типичный экран профиля для пользователя, который можно найти на большинстве веб-сайтов, где есть элемент членства.

В моем случае, поскольку экран является частью продукта SAS для исследования рынка, точки данных, которые будут отображаться в профиле, будут различаться в зависимости от продукта для исследования рынка. Модератор продукта может указать, какие точки данных необходимо регистрировать, предоставив следующую информацию:

Имя поля, отображаемое имя, тип поля (текстовое, числовое, радиокнопка, флажок и т. Д.), Обязательно…

Я застрял, пытаясь понять, как динамически генерировать представление MVC для отображения списка запрошенных точек данных. Я хотел бы использовать как можно больше MVC-фреймворка без необходимости писать собственный помощник для генерации HTML. Я также хотел бы использовать ненавязчивую проверку, если это вообще возможно.

Я запутался в том, каков наилучший подход на данный момент.

Пытаюсь ли я использовать:

  • пользовательская модель переплета
  • генерация кода для генерации класса модели во время выполнения и привязки его к представлению
  • просто сгенерировать HTML

Есть ли какой-то другой подход, который может иметь больше смысла (шаблоны jQuery), шаблоны редакторов, серия частичных представлений?

Ответы [ 2 ]

0 голосов
/ 26 июня 2011

Можете ли вы пойти дальше и выложить свое представление со всеми полями, заключенными в квадратные скобки с именованными divs, тогда в вашем действии рендера Controller добавит класс "hidden", определенный как

   .hidden
   {
      display:none;
   }

к каждому из div, содержащих поле, которое вам не нужно?

Другой вариант - написать метод расширения HTML, который динамически создает представление. Вы можете создать частичные представления для каждого типа элемента управления, и одно за другим расширение будет вставлять их в отображаемую строку HtmlString.

0 голосов
/ 24 июня 2011

Если вы не уверены, что будет отправлено на сервер для какого-либо действия, вы можете использовать это действие в параметре типа FormCollection, а затем выполнять итерацию по полям.В этот момент вы, вероятно, захотите обрабатывать каждый тип поля в каждом конкретном случае, используя имя этого поля в качестве ключа.

Чтобы отправить элементы в представление, просто оберните данные для каждого поляв классе что-то вроде:

public class DataPoint
{
    public string FieldName { get; set; }
    public string DisplayName { get; set; }
    public object Value { get; set; }
}

Затем ваш взгляд повторяет ваши DataPoint s.Метод EditorFor() будет обрабатывать проверку типа Value для получения правильного типа ввода.Единственная другая сложная часть здесь - это получить FieldName в качестве имени этого ввода.

Создание классов во время выполнения будет чрезмерным трудом для чего-то, что не слишком сложно в первомместо.Пользовательский ModelBinder не поможет вам, если вы не знаете модель, к которой привязываетесь, что является корнем вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...