如何在ASP.NET MVC 3中的HttpPost操作中禁用验证?

Sla*_*uma 6 asp.net validation asp.net-mvc asp.net-mvc-3

我有这样的创建视图......

<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>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(null, new { @class = "validation" })
    ...
    <input class="cancel" type="submit" value="OK" />
    ...
    <input name="submit" type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)

......以及相应的控制器动作:

[HttpPost]
public ActionResult Create(string submit, MyViewModel myViewModel)
{
    if (submit != null) // true, if "Save" button has been clicked
    {
        if (ModelState.IsValid)
        {
            // save model data
            return RedirectToAction("Index");
        }
    }
    else // if "OK" button has been clicked
    {
        // Disable somehow validation here so that
        // no validation errors are displayed in ValidationSummary
    }

    // prepare some data in myViewModel ...

    return View(myViewModel); // ... and display page again
}
Run Code Online (Sandbox Code Playgroud)

我发现我可以通过设置class="cancel""确定"按钮来禁用客户端验证.这很好用.

但是,服务器端验证仍然会发生.有没有办法在控制器操作中禁用它(请参阅上面的Create操作中的else-block)?

谢谢你的帮助!

slf*_*fan 7

我最近有类似的问题.我想从验证中排除一些属性并使用以下代码:

ModelState.Remove("Propertyname");
Run Code Online (Sandbox Code Playgroud)

隐藏可以使用的错误消息

ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)

但问题是,如果您不使用这些值,为什么要提交这些值?您是否最好使用重置按钮重置表单中的值:

<input type="reset" value="Reset Form">
Run Code Online (Sandbox Code Playgroud)