Я разрабатываю приложение 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>
............................
}