2016-11-11 100 views
3

我有我的登錄頁面上有兩種形式:MVC在一個頁面上5多HtmlHelper.ValidationSummary

  • 註冊
  • 登錄

它們被定義爲:

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role = "form" })) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true, ""); 
    // form controls etc... 
} 

@using (Html.BeginForm("Register", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role = "form" })) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true, ""); 
    // form controls etc... 
} 

的問題,當我提出的一種形式,還有一個驗證錯誤,這兩個驗證摘要顯示的錯誤發生。

有用於在ValidationSummary方法(https://msdn.microsoft.com/en-us/library/system.web.webpages.html.htmlhelper.validationsummary(v=vs.111).aspx),但是他們沒有解決這一問題的各種重載。

所需的功能是:

  • 當有登錄表單驗證錯誤,顯示在登錄表單的ValidationSummary中的錯誤,以及註冊表單上的ValidationSummary是空白
  • 當是註冊表單上的驗證錯誤,錯誤顯示在註冊表單的ValidationSummary中,並且登錄表單上的ValidationSummary爲空白
+0

請查看以下鏈接.http://stackoverflow.com/questions/5342427/specify-validation-summary-on-multiple-forms –

+0

感謝@RonakPatel,我剛開始看這一做法爲了解決問題。該HtmlHelper.ValidationSummary大概距離的ModelState字典中讀取並顯示在它 – Nick

+0

的項目我很好奇什麼是模型/視圖模型是要傳遞到你的剃鬚刀看法?而且,你爲什麼不考慮使用局部視圖來渲染註冊和登錄表單?它可以觸發控制器正確的ValidationSummary而不必使用某種標誌在視圖中顯示正確的驗證摘要。 – kimbaudi

回答

1

ValidationSummary只顯示任何錯誤在ModelState(要麼只是模型級或全部錯誤,這取決於你傳遞什麼param所)。然而,重要的是,這裏沒有多種形式的區別。無論哪種形式的有錯誤,ValidationSummary將導致這些錯誤的出現,如您所見。

解決這個問題的唯一方法是有條件地顯示ValidationSummary。所有你需要的是一些郵政價值,你可以檢查哪些將只存在於其中一種形式。這可能只是一個有一個屬性,另一個沒有,或者你可以通過使用一個隱藏的輸入或添加name屬性的按鈕添加一個特定的值。然後:

@if (ModelState.HasKey("MyUniqueKey")) 
{ 
    @Html.ValidationSummary(true) 
} 
+0

感謝您的解釋,我用我已經實現的代碼編輯你的解決方案 – Nick

+1

我必須使用@if(ViewData.ModelState.ContainsKey(「MyUniqueKey」))\t {@ Html.ValidationSummary(true)}' ,但這個想法是一樣的。 – jerone