Возникли проблемы с проверками в C # - PullRequest
0 голосов
/ 10 марта 2019

Я хочу добавить проверки в форму, которая используется для изменения даты события.И если пользователь забывает выбрать новую дату, я хочу сообщить, что он должен выбрать новую дату.

В моей модели я использовал аннотации данных для этого конкретного атрибута следующим образом:

    [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");
    }

Ошибка заключается в следующем:

Идентификатор имени не существует втекущий контекст,

Несмотря на то, что я близок к решению этой проблемы, но я озадачен где-то в логике.

1 Ответ

0 голосов
/ 10 марта 2019

ModelState.IsValid проверяет только с использованием связывателя модели по умолчанию, который в вашем коде называется PM_InsertEdit_ViewModel.Это не является частью ошибки компилятора, которую вы получаете.Вы можете попытаться удалить эту строку, а затем просто вернуть обратно параметр ap в представление следующим образом: return View ("Change", ap);

При этом, когда IsValid недействителен, вы возвращаете данные, полученные действием, чтобы пользователь мог редактировать свой ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...