.netcore客户端验证不同的onPost处理程序(多个事件)。

问题描述 投票:0回答:1

在我的.nercore razor页面项目中,我有许多带有多个onPost处理程序的表单--不同的事件有不同的按钮(例如:添加复制编辑删除)。

我的问题是--我不明白如何根据按下的按钮来区分客户端的验证。

编辑

假设,我有以下.cshtml,其中定义了两个输入数据字段和两个按钮。按下一个按钮(添加),第一个字段A应该被验证,按下第二个按钮(复制),另一个字段(字段B)应该被验证。

@page "{id:int}/{modeR:int}"
@model MyProject.Pages.MyProjectDB.AddRecordModel
@{
ViewData["Title"] = "Add Record";
}

<div class="row">
    <div class="col-md-7">
        <form method="post" enctype="multipart/form-data">
            <div class="form-group">
                <label asp-for="myClass.FieldA" class="control-label"></label>
                <input asp-for="myClass.FieldA" class="form-control" />
                <span asp-validation-for="myClass.FieldA" class="text-danger"></span>
            </div>  
            <div class="form-group">
                <label asp-for="myClass.FieldB" class="control-label"></label>
                <input asp-for="myClass.FieldB" class="form-control" />
                <span asp-validation-for="myClass.FieldB" class="text-danger"></span>
            </div>
            <div class="form-group">
                <button type="submit" value="Add" class="btn btn-success">Add Record)</button>
                <button type="submit" value="Copy" class="btn btn-warning">Edit Record</button>
            </div>          
        </form>
    </div>
</div>

@section Scripts {
    <partial name="_ValidationScriptsPartial" />
}

在我的.cshtml页面的最后,但它总是在调用onPost时运行。

我需要 "分组 "运行验证:对于一个按钮设置一个字段并忽略其他字段,对于另一个按钮--另一组,以此类推,就像上面写的那样。

有什么办法可以在不写自定义javascript的情况下实现,或者在服务器端实现?

另一个编辑

针对我们输入字段按钮分明的情况,提供了答案。但是,如果我们有两个输入字段和一个按钮,我们该如何处理。如果其中任何一个输入字段被填入,验证就不应该被触发,如果两个字段都是空的,验证就应该被触发。我明白,这听起来有点奇怪,但在我的例子中,我有一个输入字段和一个下拉列表。所以,要么一个字段应该被填入,要么一个项目应该从列表中选择,但是为了代码的简单性,让我们保持两个输入字段(填入A和字段B,其中一个应该被填入)和一个按钮。

@page "{id:int}/{modeR:int}"
@model MyProject.Pages.MyProjectDB.AddRecordModel
@{
ViewData["Title"] = "Add Record";
}

<div class="row">
    <div class="col-md-7">
        <form method="post" enctype="multipart/form-data">
            <div class="form-group">
                <label asp-for="myClass.FieldA" class="control-label"></label>
                <input asp-for="myClass.FieldA" class="form-control" />
                <span asp-validation-for="myClass.FieldA" class="text-danger"></span>
            </div>  
            <div class="form-group">
                <label asp-for="myClass.FieldB" class="control-label"></label>
                <input asp-for="myClass.FieldB" class="form-control" />
                <span asp-validation-for="myClass.FieldB" class="text-danger"></span>
            </div>
            <div class="form-group">
                <button type="submit" value="Add" class="btn btn-success">Add Record)</button>
            </div>          
        </form>
    </div>
</div>

@section Scripts {
    <partial name="_ValidationScriptsPartial" />
}

先谢谢你

validation asp.net-core partial-views
1个回答
1
投票

按下一个按钮(添加),第一个字段A应该被验证,按下第二个按钮(复制),另一个(字段B)应该被验证。

你可以试着把它们分别放在不同的 <form> 并通过 asp-page-handler 属性,如下图。

<h1>Go Add Handler</h1>
<form method="post">
    <div class="form-group">
        <label asp-for="myClass.FieldA" class="control-label"></label>
        <input asp-for="myClass.FieldA" class="form-control" />
        <span asp-validation-for="myClass.FieldA" class="text-danger"></span>
    </div>
    <div>
        <button type="submit" value="Add" class="btn btn-success" asp-page-handler="Add">Add Record</button>
    </div>
</form>
<hr />
<h1>Go Copy Handler</h1>
<form id="myform" method="post">
    <div class="form-group">
        <label asp-for="myClass.FieldB" class="control-label"></label>
        <input asp-for="myClass.FieldB" class="form-control" />
        <span asp-validation-for="myClass.FieldB" class="text-danger"></span>
    </div>
    <div>
        <button type="submit" value="Copy" class="btn btn-warning" asp-page-handler="Copy">Edit Record</button>
    </div>
</form>
@section scripts{
    @await Html.PartialAsync("_ValidationScriptsPartial")
}

测试结果

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.