Проблема asp.net mvc в методе IValidatableObject при проверке

Я создаю веб-приложение в 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, мой метод проверки выполняется.


person Ibrahim Shaikh    schedule 05.07.2019    source источник


Ответы (1)


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

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

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

РЕДАКТИРОВАТЬ

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

person dbraillon    schedule 05.07.2019
comment
На самом деле я добавил ModelState.IsValid в свой метод контроллера. - person Ibrahim Shaikh; 05.07.2019
comment
И главная путаница в том, что это не сработало только если LicenseId =0, в остальных случаях выполняется функция проверки - person Ibrahim Shaikh; 05.07.2019
comment
Пожалуйста, смотрите мое редактирование. Кроме того, вы должны показать нам, как именно выглядит ваш метод проверки. - person dbraillon; 06.07.2019