在我的.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" />
}
先谢谢你
按下一个按钮(添加),第一个字段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")
}
测试结果