2015-08-01 2 views
0

В моем приложении, на основе выбора поля в пользовательском интерфейсе, я загружаю список полей, которые будут отображаться из базы данных в пользовательском интерфейсе. при выборе он настраивается в базе данных, каждое поле является обязательным или необязательным. После создания пользовательского интерфейса я делаю сообщение в той же модели представления (в действии контроллера).Динамическое построение viewmodel и применение проверки UI, Asp.Net MVC 5

Каков наилучший способ для этого?

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

Так что я должен создать класс, как показано ниже, как лучший вариант или у меня есть что-то еще?

Public Class ViewModelTicket 
{ 
    Public string EmailAddress{get;set} 
    Public bool IsRequired{get;set} 
    Public bool ShouldDisplay{get;set} 

} 

и бросить кучу выражений if else на View?

Благодаря

+0

Вы пытались добавить [Требуется (ErrorMessage = "требуется")] в качестве атрибута данных? –

+0

Это определяется во время выполнения на основе конфигурации базы данных. Я не могу сделать это статически –

ответ

1

Я бы с того, что вы начали, но я бы поставил его в коллекцию, так что ваша модель представляет собой набор или имеет коллекцию этого класса вы начали. Таким образом, вы можете легко расширить свою модель, чтобы иметь больше полей.

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

В качестве альтернативы вы можете поместить свое значение ShouldDisplay в класс содержащего div.

Так вы смотрите бы иметь что-то вроде этого:

<div class="[email protected]"> 
    @Html.LabelFor(m => m.EmailAddress) 
    @Html.TextBoxFor(m => m.EmailAddress) 
</div> 

что потребовало бы этот CSS:

.show-false { display: none; } 

Что касается требуется копаться, вы могли бы использовать что-то вроде атрибута RequiredIfTrue в вашей модели.

Так что ваша модель будет:

Public Class ViewModelTicket 
{ 
    [RequiredIfTrue(IsRequired)] 
    Public string EmailAddress{get;set} 
    Public bool IsRequired{get;set} 
    Public bool ShouldDisplay{get;set} 
} 
+0

Viewmodel не должен быть коллекцией. Я знаю все свойства, которые будут частью моей модели просмотра во время разработки. Единственная проблема заключается в определении того, являются необязательными, требуются и устраняются некоторые свойства, известные во время выполнения. Поэтому я думаю, что лучше всего было бы добавить свойство IsRequired и ShouldDisplay для каждого свойства и установить их на основе конфигурации базы данных. Или есть лучший способ справиться с этим? –

+0

@ Джозеф, я обновил свой ответ. –

+0

, спасибо за ваш ответ –

Смежные вопросы