Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何在回发后再次呈现表单时禁用客户端MVC4验证?_Jquery_Asp.net Mvc 4_Client Side Validation - Fatal编程技术网

Jquery 如何在回发后再次呈现表单时禁用客户端MVC4验证?

Jquery 如何在回发后再次呈现表单时禁用客户端MVC4验证?,jquery,asp.net-mvc-4,client-side-validation,Jquery,Asp.net Mvc 4,Client Side Validation,我有一个编辑表单,用户可以对某些字段禁用MVC 4客户端验证。 我正在使用jQuery禁用客户端验证: $("#CustomerOrderNumber").prop("disabled", true); 第一次渲染窗体时,此工作很好 当我发回表单,然后从如下控制器重新显示表单时,问题就会出现: [HttpPost] public ActionResult RegisterImei(ImeiCustOrderNumberModel model) { return View(model);

我有一个编辑表单,用户可以对某些字段禁用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不需要的客户端验证消息。 我希望我的页面记住字段B已被禁用,并停止呈现客户端验证消息。 Mvc4SampleApp.zip:

回发后,元素将丢失其disabled属性,您必须在回发后对元素重新应用prop(“disabled”,true)


或者您可以在字段之前使用吗?

我在这个线程中找到了问题的解决方案:

线程中回答的有趣部分之一是关于ModelState的问题, 我引述答案:

“如果FieldA或FieldB的值为null,则ModelState.IsValidate的状态将为false,尽管它是传入客户端验证。 因此,我们应该重置未验证的字段的ModelState。”


看起来不是在禁用验证,而是在禁用控件,这可能意味着您正在使用的验证框架不需要验证值,因为禁用的控件不会返回。是的,您是对的,我只是在禁用输入字段。我使用的客户端验证是随Visual Studio中的默认MVC 4模板一起提供的验证。我使用的是VS模板中的默认MVC 4客户端验证。我已经尝试了您建议的var cbenabledregistermei=$(“#enabledregistermei”).is(':checked');如果(!cbenabledRegisterMei){$(“#CustomerOrderNumber”).prop(“disabled”,true);}但即使在执行此操作时,仍会显示不需要的客户端验证错误消息。也许默认的MVC4验证比jQuery更快?我制作了一个小示例应用程序来说明我的问题。如果用户禁用字段B,则用户可以在不验证字段B的情况下发回模型。但是当页面再次呈现时,它忘记了字段B被禁用。并呈现字段B不需要的客户端验证消息。我希望我的页面记住字段B已被禁用,并停止呈现客户端验证消息。Mvc4SampleApp.zip: