Предполагается, что ни TempData, ни ViewData не должны быть установлены в представлении. Предполагается, что представление потребляет данные, которые были сохранены в этих структурах внутри действий вашего контроллера (ну, на самом деле это не так, представление должно потреблять модель представления, но это другая тема).
TempData можно использовать, когда вы хотите сохранить информацию между двумя переадресациями. Он должен быть установлен внутри действия контроллера, которое перенаправляет на другое действие контроллера, которое будет считывать данные:
public ActionResult Foo()
{
SomeModel model = ...
TempData["foo"] = model;
return RedirectToAction("Bar");
}
public ActionResult Bar()
{
var model = TempData["foo"] as SomeModel;
...
}
Таким образом, действие контроллера должно получать данные из структуры TempData только в том случае, если это действие было вызвано после перенаправления из другого действия, установившего данные. Такое действие контроллера никогда не должно вызываться из представления, потому что если у вас есть представление, это означает, что это представление было отображено из действия контроллера, которое предположительно устанавливает данные в TempData, но всегда существует риск (если представление выполняется между запросом на сервер - AJAX или что-то в этом роде), TempData будут потеряны.
В вашем случае, когда представление должно вызывать сервер, в основном есть 3 метода:
- Используйте HTML
<form>
с полями ввода, которые будут отправлять данные на сервер
- Используйте привязку и передайте данные в качестве параметров строки запроса контроллеру.
- Используйте javascript и отправьте запрос AJAX или перенаправление на сервер
person
Darin Dimitrov
schedule
01.12.2011