2010-08-14 3 views
2

Допустим, у меня есть следующие SelectList (страны) в ViewModel:ASP.NET MVC 2 Validate SelectList

//.. 
private static string[] _countries = new[] { 
"USA", 
"Canada", 
"Japan" 
}; 
//... 
SelectList Countries = new SelectList(_countries, dinner.Country); 
//... 

И я сделать выпадающий список в следующем виде:

<%: Html.DropDownListFor(m => m.Dinner.Country, Model.Countries) %> 

I заметил, что используя firebug, я могу вставлять свои собственные значения в DropDownList, и это значение может быть вставлено в базу данных.

Каков наилучший способ проверить, нет ли введенных значений (предпочтительно DRY-метод)?

ответ

1

Я бы порекомендовал использовать DataAnnotations и создать свой собственный custom validation attribute.

Это обеспечивает возможность инкапсулировать вашу логику проверки (удовлетворяющую вашему требованию DRY) и будет применяться на стороне сервера (предотвращение манипуляций с html, как описано вами).

+0

Спасибо, это тот ответ, который я искал. MVC 2 (аннотации), а не общие (булевы методы). – KPthunder

1

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

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

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