2013-07-10 54 views
6

在我的控制器中,我添加了一些ModelState錯誤。 因此,當我渲染我的視圖時,我想要獲取所有這些錯誤並更改包含錯誤的字段標籤的顏色。查看所有ModelState錯誤

所以,我認爲我需要得到所有的ModelState錯誤,得到字段名,然後改變顏色。這是一個好方法?

如何在我的視圖中獲取ModelState錯誤?

回答

16

您可以通過ViewData.ModelState訪問它。 如果你需要對你的看法錯誤的更多的控制,你可以使用

ViewData.ModelState.IsValidField("name_of_input")

或得到的輸入列表,像這樣的錯誤:

var errors = ViewData.ModelState.Where(n => n.Value.Errors.Count > 0).ToList(); 
+1

又見http://stackoverflow.com/questions/1352948/how-to-get-all-errors-from-asp-net-mvc-modelstate – Alexey

8

在我控制我添加一些的ModelState錯誤。所以,當我渲染我的 視圖時,我想要獲取所有這些錯誤並更改包含錯誤的字段的 標籤的顏色。

如果您在模型狀態中將模型錯誤與您在視圖中使用的Html.ValidationMessageFor幫助器完全相同的鍵添加到模型錯誤中,那麼會發生什麼情況。

因此,例如,讓我們假設你的表格你有下面的代碼片段:

@Html.LabelFor(x => x.Bazinga) 
@Html.EditorFor(x => x.Bazinga) 
@Html.ValidationMessageFor(x => x.Bazinga) 

,並在您HttpPost控制器操作,你可以爲了突出Bazinga字段中添加以下錯誤消息:

ModelState.AddModelError("Bazinga", "Please enter a valid value for the Bazinga field"); 

如果你想添加這是不相關的一些特定的輸入字段,你可以總是使用@Html.ValidationSummary()助手在表單的頂部顯示它的一些一般性錯誤消息。而在你的控制器動作:

ModelState.AddModelError(string.Empty, "Some generic error occurred. Try again."); 
+0

不錯!但我需要得到錯誤,而不是使用ValidationMessageFor。這是一個很好的例子 –