关闭不显眼的验证运行时?

Turn off unobtrusive validation runtime?

提问人:Yara 提问时间:7/9/2012 最后编辑:tereškoYara 更新时间:12/29/2013 访问量:1750

问:

我的 MVC 3 应用程序具有不显眼的验证。在其中一个视图中,我有两个按钮。第一个按钮提交表单位于“action1”,第二个按钮提交到“action2”。在第一种情况下,我必须验证表单,但在第二种情况下,我需要在没有验证的情况下发布,这可能吗?目前,模型在这两种情况下都进行了验证。<form action=''>..</form>

asp.net-mvc-3 不显眼的javascript

评论


答:

1赞 Dante 7/9/2012 #1

我已经有一段时间没有做 Asp.net MVC,这就是你要找的吗?

@if(false) { // Replace false with your model property
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}
1赞 MikeTWebb 7/10/2012 #2

您有以下几种选择:

1) 不要在 Controller 操作中使用 ModelState.IsValid。在 action1 上,运行验证表单的 javascript 方法。如果表格有效,请提交表格。在 action2 上,由于未使用 ModelState.IsValid,因此提交表单,控制器操作将运行。

2) 在控制器操作中使用 ModelState.IsValid。将两个提交按钮命名为相同的名称(即“SubmitButton”)。将“action1”和“action2”指定为相应提交按钮的值。将 SubmitButton 作为字符串参数传递给 Controller 操作。如果 SubmitButton = 'action1',则查询 ModelState.IsValid。否则,不要查询 ModelState.IsValid。

选项 2 代码

控制器:

[HttpPost]
public ActionResult SomeAction(ModelObject theModel, string SubmitButton)
{
    if (SubmitButton== 'Action1')
    {
        if(ModelState.IsValid)
        {
            //do some work
        } 
        else
        {
            return(View(theModel));
        } 

    }
    else //action2 has ben used to submit, so don't vaildate
    {
       //do some work
    }
}

视图:

<input type="submit" id="action1" name="SubmitButton" value="Action1"/> 
<input type="submit" id="action2" name="SubmitButton" value="Action2"/> 
2赞 Yara 7/10/2012 #3

我找到了答案。要禁用对“action2”的验证,我必须在控制器中执行下一个方法:

ModelState.Clear(); 

并在视野中

Html.EnableClientValidation(false);