2010-08-14 136 views
2

比方說,我有一個視圖模型下面的選擇列表的(國家):ASP.NET MVC 2驗證的SelectList

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

我呈現以下流行的下拉列表:

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

我注意到使用Firebug,我可以將自己的值注入DropDownList,並將該值插入到數據庫中。

驗證沒有注入值(最好是DRY方法)的最佳方法是什麼?

回答

1

我會建議您利用DataAnnotations並創建您自己的custom validation attribute

這提供了一種封裝驗證邏輯(滿足您的DRY要求)的方法,並且將應用於服務器端(防止像您所描述的那樣的html操作)。

+0

謝謝,這是我正在尋找的答案。 MVC 2特定(註釋)而不是一般(布爾方法)。 – KPthunder 2010-08-15 05:10:21

1

在插入數據庫之前,您應始終驗證數據服務器端。如果你有一個關鍵的約束,它不會是這樣的問題,因爲更新或插入會失敗。在這種情況下,儘管在執行SQL調用之前,您應該有一個服務器端業務規則來驗證您的對象。

由於您從靜態項目列表構建列表,因此該列表應該可用於您的業務層,以便您可以與其進行比較以確保模型中包含的值有效。您可以將一種方法添加到您的對象,如IsValid或其他可以快速驗證的方法,並檢查這些硬編碼選擇是否存在這些值。