首页 > 解决方案 > ASP.Net Core MVC 在按下特定按钮时禁用验证

问题描述

我的表单上有 2 个按钮,一个提交和保存按钮。当用户单击“保存”按钮时,我希望能够跳过所有验证。我尝试将class="cancel", formnovalidate, formnovalidate="formnovalidate",添加disableValidation="true"到保存按钮,但它们都不起作用。任何帮助都会很棒!我正在使用 ASP.NET Core 3.1。

形式

<form asp-action="Request">
...
...
<input name="answer" type="submit" value="Submit" class="btn btn-primary" />
<input name="answer" type="submit" value="Save" class="btn btn-secondary" />
</form>
<partial name="_ValidationScriptsPartial" />

标签: c#asp.net-core-mvcunobtrusive-validationasp.net-core-3.1

解决方案


首先,你需要知道,如果你使用_ValidationScriptsPartial,它会生成如下的 html:

从以下位置生成 cshtml:

<input asp-for="MyDate" class="form-control" />

至:

<input class="form-control" type="date" data-val="true"
    data-val-required="The MyDate field is required."
    id="MyDate" name="MyDate" value="">

formnovalidateclass="cancel"属性可以跳过客户端的验证,但不能跳过服务器端的验证。

要解决此类问题,您可以清除模型状态:

1.型号:

public class Test
{
    public int Id { get; set; }
    public string Name { get; set; }
}

2.查看(添加formnovalidatesave input):

@model Test
<form asp-action="Request">
    <div>
        Name:<input asp-for="Name" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    <div>
        Id:<input asp-for="Id" />
        <span asp-validation-for="Id" class="text-danger"></span>
    </div>
    <input name="answer" type="submit" value="Submit" class="btn btn-primary" />
    <input name="answer" type="submit" value="Save" formnovalidate class="btn btn-secondary" />
</form>
@section Scripts {
    <partial name="_ValidationScriptsPartial" />
}

3.动作:

[HttpPost]
public IActionResult Request(Test test)
{
    if (!ModelState.IsValid)
    {
         ModelState.Clear();
         return View("Index");
    }
    return View("Index");
}

4.结果: 在此处输入图像描述


推荐阅读