2010-04-11 131 views
1

我想獲得一個非常簡單的客戶端驗證示例,以在ASP.NET MVC 2中工作。我使用數據註釋來設置必需的屬性「姓氏」。當我使用Html.ValidationMessageFor(x => x.Surname)時,將正確的客戶端驗證腳本寫入頁面。但是,當我使用Html.ValidationMessage(「姓氏」)時,客戶端驗證不會在頁面發佈之後呈現出來。客戶端驗證僅在表單發佈後纔開始工作!我可以看到腳本在表單發佈後在頁面中更新。 Html.ValidationMessage()中似乎存在一個錯誤?ASP.NET MVC 2客戶端驗證不適用於Html.ValidationMessage()?

回答

0

我還沒試過,但元數據存儲在proprerty中,所以只有ValidationMessageFor有能力檢查prop(通過靜態反射)。

另一個幫助器使用一個字符串鍵來訪問沒有任何引用屬性(也沒有驗證元數據信息)的modelstate字典,所以我不認爲Html.ValidationMessage(字符串鍵)有能力注入驗證腳本客戶端。

0

據我所知,驗證需要嘗試驗證,即使它是客戶端。

您可以嘗試在GET視圖中創建模型的新實例,然後在將其發送到視圖之前使用TryValidateModel()。這應該會導致驗證邏輯運行,從而填充客戶端驗證,這將導致所有必填字段顯示其錯誤版本,但取決於您選擇如何選擇樣式,這並不是一個大問題。

2

確保您在母版頁頭中引用了正確的腳本。

<script src="<%= Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script> 
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.js") %>" type="text/javascript"></script> 
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcValidation.js") %>" type="text/javascript"></script> 

也要看你的觀點,以確保客戶端驗證呼叫您的形式

<% Html.EnableClientValidation(); %> 
<% using (Html.BeginForm()) {%> 
    <%= Html.ValidationSummary(true) %> 
    ... 
<% } %> 

,當然你的驗證消息顯示上面的問題。

<span class="editor-label"><%= Html.ValidationMessageFor(u => u.Name)%></span> 

這真的是你所需要的。我相信只有在字段中輸入文本,然後將文本和標籤移出字段時,必需屬性纔會開始檢查,因此請嘗試查看是否獲得驗證。其他人將在屬性需要時驗證。例如,當您超過50個字符時,[StringLength(50)]將顯示一條錯誤消息。

+1

問題是爲什麼ValidationMessage(字符串鍵)不像ValidationMessageFor()那樣工作,而不是如何使用ValidationMessageFor – 2010-04-13 17:15:19