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

时间:2013-09-11 14:32:57

标签: jquery asp.net-mvc-4 client-side-validation

我有一个编辑表单,其中用户可以禁用某些字段的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

2 个答案:

答案 0 :(得分:1)

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

线程中答案的一个有趣部分是关于ModelState的问题, 我引用了答案:

“如果FieldA或FieldB的值为null,则ModelState.IsValidate的状态为false,尽管它在客户端验证中传递。 所以我们应该重置那个我们不验证的那个字段的ModelState。“

http://forums.asp.net/p/1934978/5507137.aspx?Re+How+to+keep+client+side+MVC+4+validation+disabled+when+a+form+is+rendered+again+after+post+back+

答案 1 :(得分:0)

回发后元素将失去其禁用属性,你必须在回发后重新应用prop(“disabled”,true)到元素

或者你可以使用&lt;%Html.EnableClientValidation(false); %GT;在场之前?