Asp.net-Mvc-3
客戶端驗證不適用於asp.net mvc 3中的隱藏欄位
我有一個隱藏欄位,並對其進行驗證,如下所示
@Html.HiddenFor(m => m.Rating) @Html.ValidationMessageFor(m => m.Rating)該
Rating屬性Range應用了驗證器屬性,範圍為 1-5。這被放在一個帶有送出按鈕的表單中。然後我得到了以下 jquery,它在某些使用者事件的隱藏欄位中設置值(基本上使用者點擊一些星星來評分)
$(".star").click(function(){ $("#Rating").val(2); });現在,如果我在沒有設置隱藏欄位的使用者事件的情況下送出表單,則驗證有效。錯誤消息顯示正確,它適用於所有客戶端。
現在,在這種情況下,如果我點擊星號,呼叫上面的 javascript 設置隱藏欄位,驗證錯誤消息不會消失。我可以在隱藏變數有一些有效值後送出表單。但我期望客戶端驗證應該有效。(當隱藏變數設置了一些有效值時,驗證錯誤應該消失)
最初我認為,jquery 驗證會在一些特殊事件上被呼叫,所以我嘗試自己提高 click、change、keyup、blur 和 focusout 事件,如下所示
$(".star").click(function(){ $("#Rating").val(2); $("#Rating").change(); });但這仍然行不通。錯誤消息一旦出現,就不會消失。
您可以使用 div 將隱藏欄位包裝在某處但仍位於
<form>. 添加 css 將其踢到外太空。<div style="position:absolute; top:-9999px; left:-9999px"> <input id="Rating" type="hidden" name="rating" > </div>然後將以下標籤添加到要顯示錯誤的位置:
<label for="rating" class="error" style="display:none">I am an an error message, please modify me.</label>
客戶端驗證忽略隱藏欄位。您可以動態設置“忽略”選項,但為了使其正常工作,我在 .js 文件中直接執行了以下操作。
現在這應該可以解決問題。
在我的aspx…
<%: Html.HiddenFor(model => model.age, new { @class="formValidator" }) %>在 jquery.validate.js
ignore: ":hidden:not('.formValidator')",