[英]MVC hidden field being validated
我的頁面上有一些字段會出現並消失,具體取決於您在頁面上的下拉選項。
所以,例如,我有
<section>
@Html.LabelFor(model => model.AuctionTypeId)
<div> @Html.DropDownList("AuctionTypeId", Model.AuctionTypes, @AuctionControllerResource.SelectAuctionType, new { id="auctionType", required = "required" })
@Html.ValidationMessageFor(model => model.AuctionTypeId) </div>
</section>
<section>
@Html.LabelFor(model => model.AutomaticExtensionType, new { hidden = "true", id = "automaticExtensionTypeLabel" })
<div> @Html.DropDownList("AutomaticExtensionType", Model.AutomaticExtensions, @AuctionControllerResource.SelectAutomaticExtensionType, new { hidden="hidden", required = "required", id = "automaticExtensionTypeList" })
@Html.ValidationMessageFor(model => model.AutomaticExtensionType) </div>
</section>
我對此的JQuery代碼是
$('#auctionType').change(function () {
var selectedAuctionType = $("#auctionType").val();
var englishAuctionType = $("#englishAuctionTypeId").val();
if (selectedAuctionType == englishAuctionType) {
$("#automaticExtensionTypeList").show();
$("#automaticExtensionTypeLabel").show();
} else {
$("#automaticExtensionTypeList").hide();
$("#automaticExtensionTypeLabel").hide();
}
});
現在,他們應該展示和隱藏工作。 問題是,當我提交表單並且隱藏字段automaticExtensionTypeList
,表單不會提交,因為automaticExtensionTypeList
是必填字段。 問題是如何告訴MVC僅驗證可見字段?
我已經看了一下我們在這個項目中編寫的一些JQuery,我們有這一行
$.validator.setDefaults({ ignore: [] });
顯然這可以實現隱藏驗證。 我的問題是,相反的代碼行是什么?
嘗試這個:
$.validator.setDefaults({
ignore: ':hidden, [readonly=readonly]'
});
或者用於定制
$.validator.setDefaults({
ignore: "#automaticExtensionTypeList"
});
這樣做的原因是,隱藏字段不是設計時使用一個字段不適-他們設計用於當一個字段不適用,但不要求用戶輸入。 在您的情況下,您可以:
Required
。 就個人而言,我會選擇最后一個,因為它實現起來最快,並且沒有任何明顯的缺陷 - 您可以在控制器中獲取此默認值,然后根據需要進行操作。
這是一個常見問題。
希登斯不會停止驗證。
我總是通過創建具有重疊屬性的多個表單來處理此問題。
例:
<div id="HasControlls">
@Using(Html.BeginForm)
{
@Html.LabelFor(model => model.AuctionTypeId)
@Html.DropDownList("AuctionTypeId", Model.AuctionTypes, @AuctionControllerResource.SelectAuctionType, new { id="auctionType", required = "required" })
@Html.ValidationMessageFor(model => model.AuctionTypeId) </div>
</section>
<section>
@Html.LabelFor(model => model.AutomaticExtensionType, new { hidden = "true", id = "automaticExtensionTypeLabel" })
<div> @Html.DropDownList("AutomaticExtensionType", Model.AutomaticExtensions, @AuctionControllerResource.SelectAutomaticExtensionType, new { hidden="hidden", required = "required", id = "automaticExtensionTypeList" })
@Html.ValidationMessageFor(model => model.AutomaticExtensionType) </div>
}
<div id="HasNotControlls">
@Using(Html.BeginForm)
{
@Html.LabelFor(model => model.AuctionTypeId)
@Html.DropDownList("AuctionTypeId", Model.AuctionTypes, @AuctionControllerResource.SelectAuctionType, new { id="auctionType", required = "required" })
@Html.ValidationMessageFor(model => model.AuctionTypeId) </div>
</section>
<section>
@Html.ValidationMessageFor(model => model.AutomaticExtensionType) </div>
</section>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.