Динамическая проверка проверок в контроллере [ASP.Net MVC] - PullRequest
0 голосов
/ 08 октября 2018

Я разрабатываю приложение MVC для портала Travels.Здесь у меня есть форма для отправки нового запроса на командировку, и мой контроллер выглядит следующим образом

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateOrEdit(CreateOrEditCabBookingDto model)
{
    if (ModelState.IsValid)
    {
        CabBookingAppService.Instance.CreateOrUpdate(model);
    }
    return PartialView("_CreateOrUpdateCabBooking", model);
}

Я не включил какие-либо аннотации проверки в мою Модель , потому что я хочу, чтобы они выполнялись динамическина основании некоторых условий.Возможно ли иметь динамические проверки в контроллере и добавить их в Состояние модели ?

Пример: на основе StatusId значение свойства, установить StartDate как требуется.

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateOrEdit(CreateOrEditCabBookingDto model)
{
    if (ModelState.IsValid)
    {
        If(model.StatusId == 10)
        {
           // Check validation here
           // Property "StartDate" is Required
        }

        CabBookingAppService.Instance.CreateOrUpdate(model);
    }
    return PartialView("_CreateOrUpdateCabBooking", model);
}

На основе входных данных я изменился следующим образом:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateOrEdit(CreateOrEditCabBookingDto model)
{
    if (string.IsNullOrEmpty(model.FromDateTime))
    {
       ModelState.AddModelError("FromDateTime","Date is Required");
    }

    if (ModelState.IsValid)
    {
        CabBookingAppService.Instance.CreateOrUpdate(model);
    }
    return PartialView("_CreateOrUpdateCabBooking", model);
}

И мой взгляд выглядит так:

 @using (Ajax.BeginForm("CreateOrEdit", "Travel", null, new AjaxOptions
 {
     HttpMethod = "POST",
     OnSuccess = "OnSuccess",
     OnBegin = "OnBegin",
     InsertionMode = InsertionMode.Replace,
     UpdateTargetId = "PopupId"
 }, new { id = "frm" }))
 {
    ............................
    <div class="form-group col-md-3">
       @Html.LabelFor(model => model.FromDateTime)
       @Html.TextBoxFor(model => model.FromDateTime, new { @class = "form-control datetimepicker", autocomplete = "off" })
       @Html.ValidationMessageFor(model => model.FromDateTime)
     </div>
     ............................
 }
...