2011-03-17 64 views
27

驗證摘要我的網頁上有2種形式如下:指定的多種形式

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("code", "Confirmation Code") 
    @Html.TextBox("code") 
    <input type="submit" value="Go" /> 
} 
@using (Html.BeginForm("SendConfirmation", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("email", "Email") 
    @Html.TextBox("email") 
    <input type="submit" value="Resend" /> 
} 

如果SendConfirmation拋出一個錯誤,有顯示2驗證摘要。我如何獲得驗證摘要來定位它自己的?

回答

5

的解決方案是,當您驗證表單

以瞭解詳情this blog post

+1

這是兩個驗證摘要問題的答案。只繪製您想要顯示的驗證摘要。例如,用戶點擊登錄。在控制器中,將諸如「CurrentAction」之類的模型的屬性設置爲「登錄」。然後在視圖中使用該屬性以便不爲表單的註冊部分繪製驗證摘要。 – 2013-12-30 15:08:20

0

爲了做到這一點,你需要將兩種形式分開,只畫出了驗證總結,把每一個在部分查看並在驗證失敗時返回提交的部分視圖。更改您的行動結果以返回部分結果。

局部視圖可以在頁面中使用了呈現如下:

@Html.partial("_PartialView") 

還是這樣,如果你需要傳遞一個模型

@Html.partial("_Partial", Model) 

你不能有兩個驗證摘要任何其他方式相同的頁面。

-1

明確地定義形式的動作和控制器,如果你在1個視圖有多種形式,如

@using (Html.BeginForm("SendCode", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("code", "Confirmation Code") 
    @Html.TextBox("code") 
    <input type="submit" value="Go" /> 
} 
@using (Html.BeginForm("SendConfirmation", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("email", "Email") 
    @Html.TextBox("email") 
    <input type="submit" value="Resend" /> 
} 

相信你有不同的操作這兩種形式。

+0

這並不能解決問題,HtmlHelper.ValidationSummary方法只是讀取ModelState字典中的錯誤並顯示它們,無論它們來自哪種形式 – Nick 2016-11-11 13:55:55

2

Html.ValidationSummary()不需要在你的form元素的內部,你只需要它在大多數情況下。我會將它移動到兩種形式之外,就像您的主體內容之上的東西,這應該會給您預期的效果。我相信我的最後一個應用程序,我把它放在佈局文件中。

14

給提交按鈕唯一的名稱兩個表單,像這樣:

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("code", "Confirmation Code") 
    @Html.TextBox("code") 
    <input type="submit" name="login-top" value="Go" /> 
} 
@using (Html.BeginForm("SendConfirmation", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("email", "Email") 
    @Html.TextBox("email") 
    <input type="submit" name="login-main" value="Resend" /> 
} 

然後,您可以檢查通過檢查密鑰的請求的值的特定形式是否已提交了對應於提交按鈕,然後有條件地顯示驗證摘要即。在頂部表格中您可以添加:

if (Request.Form.AllKeys.Contains("login-top")) 
{ 
    @Html.ValidationSummary() 
}