Я хочу добавить проверки в форму, которая используется для изменения даты события.И если пользователь забывает выбрать новую дату, я хочу сообщить, что он должен выбрать новую дату.
В моей модели я использовал аннотации данных для этого конкретного атрибута следующим образом:
[Required]
public DateTime Estimated_Start_Date { get; set; }
Это контроллер для изменения даты
public ActionResult Change(int? Id)
{
var dtl = _context.pm_main_repz.Include(a => a.PM_Evt_Cat).SingleOrDefault(a => a.Id == Id);
if (dtl == null)
{
return Content("No item found!");
}
var vm = new PM_InsertEdit_ViewModel()
{
pm_main_rep = dtl,
};
return View(vm);
}
Это представлениедля изменения даты
@model Project.ViewModel.PM_InsertEdit_ViewModel
@using (Html.BeginForm("ChangeDate", "PM", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="form-group">
<label>Select New Date</label>
@Html.TextBoxFor(a => a.pm_main_rep.Estimated_Start_Date, new { @class = "form-control"})
@Html.ValidationMessageFor(a=> a.pm_main_rep.Estimated_Start_Date)
</div>
@Html.AntiForgeryToken();
@Html.HiddenFor(a => a.pm_main_rep.Id);
<button class="btn btn-primary">Request</button>
}
Теперь это метод ChangeDate в моем контроллере
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ChangeDate(PM_InsertEdit_ViewModel ap)
{
var item = _context.pm_main_repz.Single(a => a.Id == ap.pm_main_rep.Id);
item.Estimated_Start_Date = ap.pm_main_rep.Estimated_Start_Date;
_context.SaveChanges();
return RedirectToAction("Success", "PM");
}
Обратите внимание, что до этого момента все работает нормально, если я не выполняю проверку, проверяя ModelState, но если я это сделаю, он не распознает часть кода и подчеркивает его красным цветом.
Это код, когда я хочу проверить ModelState в методе ChangeDate.По сути, я хочу, чтобы пользователи оставались в том же виде, если они не выберут новую дату.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ChangeDate(PM_InsertEdit_ViewModel ap)
{
if (!ModelState.IsValid)
{
var dtl = _context.pm_main_repz.Include(a => a.PM_Evt_Cat).SingleOrDefault(a => a.Id == Id); // Note: It underlines the Id with red and says: The Name Id does not exist in the current context
var vm = new PM_InsertEdit_ViewModel()
{
pm_main_rep = dtl,
};
return View("Change",vm);
}
var item = _context.pm_main_repz.Single(a => a.Id == ap.pm_main_rep.Id);
item.Estimated_Start_Date = ap.pm_main_rep.Estimated_Start_Date;
_context.SaveChanges();
return RedirectToAction("Success", "PM");
}
Ошибка заключается в следующем:
Идентификатор имени не существует втекущий контекст,
Несмотря на то, что я близок к решению этой проблемы, но я озадачен где-то в логике.