ASP. NET Core 3 MVC пользовательская проверка клиента для массивов - PullRequest
0 голосов
/ 28 января 2020

У меня немного странный. Мне нужно выполнить проверку на стороне клиента для массива строк, но я понятия не имею, как. Проверка на стороне сервера работает просто отлично, но у каждого отдельного <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");

1 Ответ

0 голосов
/ 28 января 2020

Я предлагаю вам использовать удаленную проверку для этих случаев. Вы можете проверять все, что хотите, используя дополнительные данные из вашего DbContext, и это автоматически подразумевает проверку на стороне клиента с помощью jQuery Unobtrusive.

Пример

Свойство Annotate с помощью [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> 

Вы можете узнать больше о удаленной проверке здесь .

...