【问题标题】:ASP.NET Core 3 MVC custom client validation for arrays数组的 ASP.NET Core 3 MVC 自定义客户端验证
【发布时间】:2020-01-27 22:23:15
【问题描述】:

我有点奇怪。我需要对字符串数组执行客户端验证,但我不知道如何。服务器端验证工作得很好,但每个人 <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");

【问题讨论】:

    标签: asp.net-core model-view-controller asp.net-core-mvc asp.net-core-3.1


    【解决方案1】:

    我建议您对这些情况使用远程验证。您可以使用来自 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> 
    

    您可以阅读有关远程验证的更多信息here

    【讨论】:

    • 这是否适用于数组中的各个值?我现在最大的问题是,因为 asp 标签的帮助不是 exactly PaperQuantity (PaperQuantity[count]),data-val 标签不会被添加到 HTML 代码中,而 JS 不能认出它。该字段基本上是一个动态生成的字段,用户可以根据需要添加任意数量的 PaperQuantity 字段,我需要检查其中至少一个是否超过 0。
    • 我不确定您如何动态生成这些字段,但它有点实时验证,每当您更改值时都会调用它。如果您的属性是一个数组,您可以使用数组方法进行检查,例如array.Any(x =&gt; x &gt; 0),以检查是否有任何具有可选条件的值。使用标签助手它应该自动添加data-val标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2014-03-19
    • 2014-11-03
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多