0
我正在使用MVC 2.我有關於客戶端和服務器端驗證的問題。可以說,我有一個類,它有3個屬性爲這樣:使用數據註釋瞭解客戶端和服務器端驗證
[Required(ErrorMessage = "Required")]
public object Property1 { get; set; }
[Required(ErrorMessage = "Required")]
public object Property2 { get; set; }
[Required(ErrorMessage = "Required")]
public object Property3 { get; set; }
在我看來,我只有Property1和財產2,使他們文本框。我沒有將Property3添加到視圖中(但它被標記爲如上所需)。如果我沒有在文本框中輸入任何內容,那麼客戶端驗證將失敗。如果我在文本框中插入文本,即使Property3沒有設置值,客戶端是否會傳遞?它會在服務器端失敗嗎?
我點擊提交按鈕後,服務器端出現問題。這裏是我的代碼爲我創建行動:
public ActionResult CreateApplication(Application application)
{
try
{
application.ApplicationStateID = 1;
application.SubmitterEmployeeNumber = "123456";
if (ModelState.IsValid)
{
// Code here
}
}
catch
{
}
}
ApplicationStateID和SubmitterEmployeeNumber沒有在客戶端設置(它們都標記爲必需的),所以我將它設置在這裏。在我設置它們之後,爲什麼驗證在服務器端仍會失敗?
謝謝。看到我更新的問題,也許你可以更多地瞭解一些情況。我現在就去閱讀那篇文章。 – 2010-09-18 10:29:38
原因是因爲驗證是在模型綁定期間執行的。在此模型綁定發生後,您正在設置所需的屬性**。一種可能的解決方法是使用'TryUpdateModel'方法而不是將其作爲動作參數傳遞。 – 2010-09-18 10:35:22
謝謝你Darin。只是最後一個問題,我是否正確地做了這件事,把所有事情都放在一個嘗試和抓住?通常在Web表單中,我將檢查應用程序是否爲空,如if(application == null)。 – 2010-09-18 10:38:05