Проблема asp.net MVC в методе IValidatableObject при проверке - PullRequest
0 голосов
/ 05 июля 2019

Я создаю веб-приложение в asp.net mvc-5,

Я использую интерфейс IValidatableObject для проверок,

вот как выглядит моя модель,

public class LicenseInfo : IValidatableObject
{
    public int LicenseId { get; set; }
    //other properties

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        //Validate class which will be called on submit
    }
}

Мой взгляд

@using (Ajax.BeginForm("_AddEditLicense", "User", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "dvLicenseContent", OnSuccess = "fnAddEditOnSuccess" }))
{
    @Html.ValidationSummary(false)
    @Html.DropDownListFor(m => m.LicenseId, new SelectList(Model.LicenseData, "Value", "Text"), "Select....", new { @class = "form-control" })

    @*other html elements*@
    <input type="submit" value="@ViewBag.Submit" id="btnaddLicense" class="btn btn-primary btn-block" />
}

Мой контроллер

[HttpPost]
public ActionResult _AddEditLicense(LicenseInfo data)
{
    if (ModelState.IsValid)
    {
        //execution
    }
}

, когда мой LicenseId = 0, тогда моя проверка не работает и отладчик на моем контроллере выполняется напрямую, но когда LicenseId > 0 тогда мой метод проверки выполняется.

1 Ответ

1 голос
/ 05 июля 2019

Вам нужно вручную добавить валидацию внутри вашего метода контроллера.

[HttpPost]
public ActionResult _AddEditLicense(LicenseInfo data)
{
   if (ModelState.IsValid)
   {
      // Execute code
   }

   // Not validated, return to the view
   return View(data);
}

EDIT

Ну, 0 - это допустимое значение для типа int, даже если оно ничего не представляет в вашем раскрывающемся списке. Попробуйте изменить его на int ?, тогда значение по умолчанию будет нулевым, и его будет легче отловить при проверке модели.

...