我有一个编辑表单,其中用户可以禁用某些字段的MVC 4客户端验证。 我正在使用jQuery禁用客户端验证:
$("#CustomerOrderNumber").prop("disabled", true);
首次呈现表单时,此工作正常。
当我回复表单然后从这样的控制器重新显示表单时出现问题:
[HttpPost]
public ActionResult RegisterImei(ImeiCustOrderNumberModel model)
{
return View(model);
}
因为再次呈现表单时,不再禁用已禁用的验证,并且该字段的不需要的客户端验证将再次处于活动状态。
这似乎是由原始源标记决定的:
<input class="text-box single-line" data-val="true" data-val-required="The Customer Order Number field is required." id="CustomerOrderNumber" name="CustomerOrderNumber" type="text" value="SF1861-" />
有关如何在回发后再次呈现表单时禁用客户端验证的任何想法?
我制作了一个示例应用来说明我的问题。 如果用户禁用字段B,则用户可以在不验证字段B的情况下回发模型。 但是当页面再次呈现时,它已经忘记了字段B已被禁用。 并且字段B的不需要的客户端验证消息呈现。 我希望我的页面记住Field B已被禁用并停止呈现客户端验证消息。 Mvc4SampleApp.zip: http://sdrv.ms/14FUKa6
答案 0 :(得分:1)
我在这个帖子中找到了问题的解决方案:
线程中答案的一个有趣部分是关于ModelState的问题, 我引用了答案:
“如果FieldA或FieldB的值为null,则ModelState.IsValidate的状态为false,尽管它在客户端验证中传递。 所以我们应该重置那个我们不验证的那个字段的ModelState。“
答案 1 :(得分:0)
回发后元素将失去其禁用属性,你必须在回发后重新应用prop(“disabled”,true)到元素
或者你可以使用&lt;%Html.EnableClientValidation(false); %GT;在场之前?