Asp.net-Mvc-3

客戶端驗證不適用於asp.net mvc 3中的隱藏欄位

  • December 18, 2013

我有一個隱藏欄位,並對其進行驗證,如下所示

@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')",

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