asp.net-core - 数组的 ASP.NET Core 3 MVC 自定义客户端验证
问题描述
我有点奇怪。我需要对字符串数组执行客户端验证,但我不知道如何。服务器端验证工作得很好,但每个人<input>
都没有data-val
我设置的那个。有谁知道如何解决这个问题?
模型
[RequiredIf]
public string[] PaperQuantity {get;set;}
看法
<input asp-for="PaperQuantity[count]">
自定义验证
public class RequiredIfAttribute : ValidationAttribute, IClientModelValidator
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// Validation method here
}
public void AddValidation(ClientModelValidationContext context)
{
MergeAttribute(context.Attributes, "data-val", "true");
MergeAttribute(context.Attributes, "data-val-requiredif", ErrorMessage);
}
}
JavaScript
$.validator.addMethod("requiredif", function () {
// Validation method here
});
$.validator.unobtrusive.adapters.addBool("requiredif");
解决方案
我建议您对这些情况使用远程验证。您可以使用 DbContext 中的可选数据验证您想要的任何内容,它会自动暗示使用jQuery Unobtrusive
.
例子
使用 [Remote] 属性注释属性
[Remote(action: "VerifyPaper", controller: "MyControler")]
public string PaperQuantity {get; set;}
例如,由于 jQuery 期望 JSON 响应Verify paper
,您的控制器中的方法应该是这样的:
[AcceptVerbs("GET", "POST")]
public IActionResult VerifyPaper(string paperQuantity)
{
if (string.Empty(paperQuantity))
{
// Your error message
return Json("Paper quantity can't be empty.");
}
// If everything is okay return true
return Json(true);
}
你的观点应该是这样的:
<label asp-for="PaperQuantity">Paper quantity</label>
<input asp-for="PaperQuantity"/>
<span asp-validation-for="PaperQuantity"></span>
您可以在此处阅读有关远程验证的更多信息。
推荐阅读
- android - 滚动动画到达顶部时折叠工具栏不展开
- pandas - 大熊猫给定条件的年度聚合
- pandas - 将一个数据帧中的列值映射到另一个数据帧的索引并提取值
- android - AAPT:错误:资源“attr/orientation”的重复值与配置“”
- ocaml - ocaml 列表中的最大 int
- react-native - 在本机反应中使用 opencv.js
- asp.net-core - 异常后 Application Insights RequestTelemetry 未显示在请求中
- node.js - PassportJS Google oauth2.0 登录/注册
- javascript - 从 easports.com 抓取数据,问题
- node.js - 如何在 CPanel/共享主机中安装节点 js 应用程序