Asp.net-Mvc-3
ASP.Net MVC 3 不顯眼的驗證不適用於部分視圖
我已經設置了一個包含自己的表單標籤的局部視圖,如下所示:
<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> 標籤。
出於某種奇怪的原因,我的客戶端驗證不起作用,我首先在發佈時看到錯誤。
部分視圖和客戶端驗證有什麼特別之處嗎?
我已包含以下腳本:
<script src="/Scripts/jquery.1.5.1.min.js" type="text/javascript"></script> <script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script> <script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>編輯
我只是試著把這個腳本扔到頁面上:
jQuery('form').submit(function () { alert(jQuery(this).valid()); });它警告“真”,所以客戶端驗證腳本肯定在那裡,並且由於某種原因它沒有檢查有問題的欄位:-/
編輯 2
我已將頁面的整個原始碼(HTML + JS)上傳到 pastebin: http: //pastebin.com/GvqLW495
我終於找到了導致它失敗的原因,這是我的部分視圖位於 html 表內的事實……
<table> <tr> <th> Date </th> <th> Amount </th> <th> Tags </th> <th> Type </th> <th> </th> </tr> @Html.Action("Create") </table>這不起作用,但是如果我將 @Html.Action 移到 table 標記之外,它就可以正常工作。
編輯:
我剛剛意識到,查看您的程式碼,您正在使用 jQuery 1.5.1 和(我假設).NET 提供的 jQuery.validate。不幸的是,這兩者還沒有一起工作。您必須前往此處獲取適用於最新 jQuery 的版本(您需要使用 1.4.4)。如果這不起作用,我仍然建議查看下面的解決方案。
我有一個類似的問題(雖然我不確定這是完全相同的問題)。我在這篇博文中寫過解決方案。不幸的是,我不能確定您是否遇到了同樣的問題,但值得一試。
基本上,它歸結為我在載入我的 PartialViews 後必須呼叫此行(儘管我是通過 AJAX 載入它們,這是我認為導致問題的原因):
$.validator.unobtrusive.parse($("#validation"));有關更多詳細資訊,請參閱部落格文章。希望它可以幫助你。