Я новичок в ASP.NET MVC. После долгой работы с традиционной моделью ASP.NET мне понадобилось время, чтобы понять эту модель.Передача данных с контроллера для просмотра, обратно к контроллеру, назад к просмотру
Я иду через NerdDinner, чтобы понять, как все работает.
Итак, у меня есть объект, который необходимо передать через пару видов. Как и в статье NerdDinner Step 6: ViewData and ViewModel.
Я сохраняю данные из Get to Post в первый раз, затем помещаю его в TempData и передаю его другому действию (AnotherAction). Как только я получу свои данные в Get, я не могу сохранить его в Post.
Вот мой код:
public class DinnerFormViewModel
{
public Dinner Dinner { get; private set; }
public DinnerFormViewModel(Dinner dinner)
{
Dinner = dinner;
}
}
public class DinnersController : Controller
{
public ActionResult Action()
{
Dinner dinner = new Dinner();
return View(new DinnerFormViewModel(dinner));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Action(Dinner dinner, FormCollection collection)
{
try
{
// Some code
TempData["Dinner"] = dinner;
return RedirectToAction("AnotherAction");
}
catch
{
return View();
}
}
public ActionResult AnotherAction()
{
Dinner dinner = (Dinner)TempData["Dinner"]; // Got my dinner object
return View(new DinnerFormViewModel(dinner));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AnotherAction(Dinner dinner, FormCollection collection)
{
// Lost my dinner object, dinner comes in as null
}
}
Сброс TempData на AnotherAction не помогает. Я понимаю, что TempData хорош только после RedirectToAction. Во всяком случае, я тоже пробовал этот метод с и без RedirectToAction. Конечно, RedirectToAction вводит бесконечный цикл, вызывающий версию GetAccess, и установка TempData без RedirectToAction ничего мне не дает. Поэтому я использую DinnerFormViewModel. Если вы посмотрите на код, то в моем первом действии (Get) я сделаю то же самое.Здесь я могу изменить объект Dinner, но я хочу, и я верну тот же объект Dinner на Action (Post). – Sai
Jon, я добавил пример для переопределения TempData в другом действии, чтобы он был доступен для сообщения обратно другому действию. Я могу получить объект обеда из TempData успешно. Тем не менее, поскольку мое представление не публикует правильные переменные формы в AnotherAction, экземпляр унаследователя, переданный в действие, имеет значение null. FYI, у меня нет проекта ужина ботаника, поэтому я создал свой собственный класс Ужин с единственным свойством Name. –
Это волшебство работает Аарон, потрясающе! Знаешь, я думал, что раньше пытался это сделать, поэтому я выполнил свои шаги с моим текущим проектом, и это не сработало. Затем я начал новый проект только с вашим кодом, и он работал там, поэтому я знал, что у меня были некоторые незначительные ошибки где-то. Поэтому я стал идиотом. Спасибо! – Sai