Asp.net-Mvc-3

ASP.Net MVC 3 不顯眼的驗證不適用於部分視圖

  • March 11, 2014

我已經設置了一個包含自己的表單標籤的局部視圖,如下所示:

<tr>
   @using (Html.BeginForm("Create"))
{
       <td>
           @Html.TextBoxFor(model => model.Date)
           @Html.ValidationMessageFor(model => model.Date)
       </td>
       <td>
           @Html.TextBoxFor(model => model.Amount)
           @Html.ValidationMessageFor(model => model.Amount)
       </td>
       <td>
           @Html.TextBoxFor(model => model.Tags)
           @Html.ValidationMessageFor(model => model.Tags)
       </td>
       <td>
           @Html.EnumDropDownListFor(model => model.Type)
       </td>
       <td>
           <input type="submit" value="Add" />
           @Html.ValidationSummary(true)
       </td>
}
</tr>

我使用 @Html.Action(“Create”) 在頁面上呈現它(它是表格的一部分,因此是 <tr> 標籤。

出於某種奇怪的原因,我的客戶端驗證不起作用,我首先在發佈時看到錯誤。

部分視圖和客戶端驗證有什麼特別之處嗎?

我已包含以下腳本:

&lt;script src="/Scripts/jquery.1.5.1.min.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="/Scripts/jquery.validate.min.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"&gt;&lt;/script&gt;

編輯

我只是試著把這個腳本扔到頁面上:

jQuery('form').submit(function ()
{
   alert(jQuery(this).valid());
});

它警告“真”,所以客戶端驗證腳本肯定在那裡,並且由於某種原因它沒有檢查有問題的欄位:-/

編輯 2

我已將頁面的整個原始碼(HTML + JS)上傳到 pastebin: http: //pastebin.com/GvqLW495

我終於找到了導致它失敗的原因,這是我的部分視圖位於 html 表內的事實……

&lt;table&gt;
   &lt;tr&gt;
       &lt;th&gt;
           Date
       &lt;/th&gt;
       &lt;th&gt;
           Amount
       &lt;/th&gt;
       &lt;th&gt;
           Tags
       &lt;/th&gt;
       &lt;th&gt;
           Type
       &lt;/th&gt;
       &lt;th&gt;
       &lt;/th&gt;
   &lt;/tr&gt;
   @Html.Action("Create")
&lt;/table&gt;

這不起作用,但是如果我將 @Html.Action 移到 table 標記之外,它就可以正常工作。

編輯

我剛剛意識到,查看您的程式碼,您正在使用 jQuery 1.5.1 和(我假設).NET 提供的 jQuery.validate。不幸的是,這兩者還沒有一起工作。您必須前往此處獲取適用於最新 jQuery 的版本(您需要使用 1.4.4)。如果這不起作用,我仍然建議查看下面的解決方案。


我有一個類似的問題(雖然我不確定這是完全相同的問題)。我在這篇博文中寫過解決方案。不幸的是,我不能確定您是否遇到了同樣的問題,但值得一試。

基本上,它歸結為我在載入我的 PartialViews 後必須呼叫此行(儘管我是通過 AJAX 載入它們,這是我認為導致問題的原因):

$.validator.unobtrusive.parse($("#validation"));

有關更多詳細資訊,請參閱部落格文章。希望它可以幫助你。

引用自:https://stackoverflow.com/questions/5302360