2012-01-11 51 views
1

我在理解如何最好地實現不顯眼的客戶端驗證時遇到問題,該驗證與在控制器中添加的錯誤一起使用ModelState.AddModelError()MVC3中的驗證摘要,結合了預定義的和ModelState的錯誤

所以,這是當前的代碼:

@Html.ValidationSummary(true) 
@Html.ValidationMessageFor(model => model.FirstName) 
@Html.ValidationMessageFor(model => model.LastName) 

會正確顯示錯誤消息,如果我離開了名字。如果我輸入名字並標籤出來,消息將消失 - 因爲它應該工作。

當沒有客戶端錯誤存在,我可以提交此表單,我必須檢查數據庫,用戶不存在。如果是這樣,我加入一個錯誤有:

ModelState.AddModelError("", "User already exists") 

當返回模型,顯示一個錯誤框,但沒有消息在那裏。

如果我將@Html.ValidationSummary(true)更改爲@Html.ValidationSummary(false),我將看到模型正確返回的錯誤消息。(編輯:Jan的評論解決了這部分)

現在的問題是,所有的客戶端驗證將被複制並顯示在兩個不同的地方。

此外,我想錯誤顯示在相同的地方/ div。就目前而言,這將是兩個不同的驗證摘要。

任何方法?

+2

這應該工作(空字符串作爲AddModelError和ValSum(true)的關鍵參數)。你確定你傳遞一個空字符串作爲關鍵參數嗎? – Jan 2012-01-11 13:40:23

+0

謝謝!將它設置爲空之後我沒有編譯過。現在它正確顯示錯誤信息。我仍然有問題,現在有兩個錯誤框:一個用於模型狀態錯誤的摘要,然後一個用於預定義的客戶端錯誤:@ Html.ValidationMessageFor() – Andreas 2012-01-11 13:53:44

回答

0

您在文本框旁邊設置的驗證可以將@Html.ValidationMessageFor(model => model.LastName)的文本設置爲@Html.ValidationMessageFor(model => model.LastName, "")。或者如果你想添加一個'*',如果你想。那麼你不會有消息在你的文本框旁邊。

+0

其實我沒有這些消息旁邊文本框。作爲總結,我把它們放在首位。這不起作用,仍然有兩個不同的錯誤框。一個顯示模型狀態錯誤,另一個顯示客戶端錯誤。 – Andreas 2012-01-11 14:13:26