【问题标题】:ASP.NET Core disable validation when button is pressed按下按钮时 ASP.NET Core 禁用验证
【发布时间】:2023-01-27 09:53:56
【问题描述】:

在剃须刀页面上,我有两个“提交”类型的按钮。

第一个按钮用于向本地表添加数据,第二个按钮用于添加数据库中的所有列。

我想阻止第一个按钮检查字段的有效性,只有第二个按钮检查字段。

如何防止第一个按钮检查字段的有效性?

(ASP.NET 核心)

【问题讨论】:

    标签: asp.net-core validation razor-pages


    【解决方案1】:

    formnovalidate 添加到第一个按钮输入。而formnovalidate属性可以跳过客户端的验证,但不能跳过服务器端的验证。所以你可以清除模型状态以跳过服务器端的验证。 下面是一个mvc demo,大家可以参考一下。

    自定义.cs:

    public class Custom
        {
            public string name{ get; set; }
            public int Id { get; set; }        
        }
    

    在 HomeController.cs 中:

     public IActionResult Submit()
            {
                return View();
            }
            [HttpPost]
            public IActionResult Submit(Custom custom)
            {
                if (!ModelState.IsValid)
                {
                    ModelState.Clear();//clear model state to skip validation in server side
                    return View("Submit");
                }
                return View("Submit");
            }
    

    看法:

    @model nnnn.Models.Custom
    
    @{
        ViewData["Title"] = "Submit";
    }
    
    <h1>Submit</h1>
    
    <h4>Custom</h4>
    <hr />
    <div class="row">
        <div class="col-md-4">
            <form asp-action="Submit">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <div class="form-group">
                    <label asp-for="name" class="control-label"></label>
                    <input asp-for="name" class="form-control" />
                    <span asp-validation-for="name" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Id" class="control-label"></label>
                    <input asp-for="Id" class="form-control" />
                    <span asp-validation-for="Id" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <input type="submit" value="Create" formnovalidate class="btn btn-primary" />
                    <input  type="submit" value="Save"  class="btn btn-secondary" />
                </div>
            </form>
        </div>
    </div>
    
    <div>
        <a asp-action="Index">Back to List</a>
    </div>
    
    @section Scripts {
        @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    }
    

    结果:

    【讨论】:

      【解决方案2】:

      我相信有很多方法可以处理这个......

      您可以使用不同的按钮指向不同的控制器,其中一个就像此链接中一样,您可以使用其中的不同方法。检查一下。我希望这有帮助。

      Disable Validation Link

      【讨论】:

        【解决方案3】:

        您可以像下面这样创建这两个按钮。

        type="submit" 按钮被触发时,发送请求。在另一种情况下,可以执行 get 请求,您可以在与 get 相关的操作方法中编写代码。

        <button type="submit" class="btn btn-success" asp-action="Create" asp-controller="Category">Submit</button>
        <a class="btn btn-success" asp-controller="Category" asp-action="Index" >Back</a>
        

        【讨论】:

          猜你喜欢
          • 2011-02-02
          • 2019-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-15
          • 2016-08-15
          • 1970-01-01
          • 2017-11-07
          相关资源
          最近更新 更多