2013-02-28 47 views
3

我創建了一個基於用戶模型的登錄頁面,除了用戶名和密碼(例如電子郵件地址),用戶還有其他必填字段,但我只顯示用戶名和密碼用於登錄。ValidationSummary顯示不在頁面中的字段

問題是,如果我將用戶名和/或密碼留空,ModelState將獲取Model類中所有字段的錯誤消息,從而導致誤導性驗證消息。

爲視圖的代碼是:

<div class="form-login"> 
@using (Html.BeginForm()) 
{ 
    <h2 class="form-signin-title">Login</h2> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.Username) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Username) 
     @Html.ValidationMessageFor(model => model.Username) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Password) 
    </div> 
    <div class="editor-field"> 
     @Html.PasswordFor(model => model.Password) 
     @Html.ValidationMessageFor(model => model.Password) 
    </div> 
    <button class="btn btn-medium btn-primary" type="submit">Login</button> 
} 

驗證摘要是_layout的一部分,並且如果該模型不是有效時,才顯示。

有沒有一種方法可以在屏幕上顯示控件的驗證摘要?

+2

將你的驗證總結放在你的_Layout中無疑會給你帶來更多的痛苦。只需將其放入相應的視圖中即可。 – mattytommo 2013-02-28 08:53:03

+0

@mattytommo - 我已爲每個視圖創建了一個摘要。不是我懷疑你,但爲什麼會增加更多的痛苦,而不是它的價值? – Daryl 2013-03-01 07:27:23

回答

1

驗證錯誤消息顯示,因爲asp.net MVC驗證驗證視圖模型。因此,如果您在視圖中顯示字段或不是因爲整個模型已經過驗證,則無關緊要。對於只包含顯示字段的表單,您應該使用專用視圖模型。

+0

謝謝,這解決了我的問題。 什麼是ViewModels的最佳做法,讓他們在一個單獨的文件夾中,或在控制器文件夾/控制器類中? – Daryl 2013-02-28 11:54:32

+0

我將它們添加到模型子文件夾ViewModels中,因爲它們與模型相關。 MVC Music Store(http://mvcmusicstore.codeplex.com/)將ViewModels添加到根目錄中的ViewModels文件夾。我會將它們添加到您在一年內打開解決方案時可以找到它們的位置...... – saintedlama 2013-03-01 16:59:33