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 или перенаправление на сервер