Вьюбаг не сохраняет идентификатор в сообщении - PullRequest
1 голос
/ 29 февраля 2020
public ActionResult Attendance(FormModel form, int id)
    {
 ViewBag.studentname = new SelectList(db.Students, "StudentID", "Full_Name");
        ViewBag.studentID = new SelectList(db.Students, "StudentID", " StudentID");
        ViewBag.instructorID = new SelectList(db.Instructors, "InstructorID", "Name");
ViewBag.csID = id;
        var attendances = db.Attendances;
        return View(attendances.ToList());
    }

Здесь я сохраняю идентификатор в viewbag для использования позже:

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Attendance([Bind(Include = "AttendanceID,csID,InstructorID,StudentID")] Attendance attendance)
    {
        try
        {
            if (ModelState.IsValid)
            {
                attendance.csID = ViewBag.csID;
                db.Attendances.Add(attendance);
                db.SaveChanges();
                //ViewBag.msg = "Instructor Added";
                return RedirectToAction("Attendance");

            }
            return View(attendance);
        }
        catch
        {
            return View(attendance);
        }
    }
}

} Здесь я пытаюсь установить csid в то же значение, что и viewbag. Когда я отлаживаю его в GET, я получаю int id, но он не сохраняется в post, когда я отлаживаю его, в обоих методах появляется пустое значение

1 Ответ

1 голос
/ 29 февраля 2020

Как добраться от первого метода действия до следующего? Если первое возвращает представление, а это представление имеет форму, которая отправляет второе, то не было бы никаких оснований ожидать, что ViewBag будет содержать значения. Это значения, отправляемые в представление для использования в представлении, они не сохраняются на стороне сервера в течение неопределенного времени.

Если вы хотите, чтобы эти значения отправлялись обратно на сервер, вы бы включили их в форму публикации. , Например, у вас может быть скрытый ввод в вашей форме:

<input type="hidden" name="csID" value="@ViewBag.csID" />

Тогда при публикации этой формы значение будет включено в данные POST.

Это выглядит свойство csID находится на вашем Attendance объекте, поэтому оно должно быть автоматически привязано к этому свойству. Однако это может зависеть от структуры вашей модели и структуры формы (чего мы здесь не видим). Но вы можете при необходимости учесть это.

По сути, если свойство является частью вашей модели и вы хотите, чтобы оно было размещено на странице, включите его в значение формы на странице, как и любое другое. другое свойство модели. (Вам может даже не понадобиться вообще использовать ViewBag здесь, и я не уверен, почему вы это делаете. Вы отправляете Attendance модели на просмотр и отправляете модель Attendance обратно на контроллер, так что это Непонятно, почему вы обращаете особое внимание на некоторые свойства этой модели.)

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