我试图通过视图中的actionLink()
调用控制器。该控制器从TempData存储库获取数据。但是,似乎无论我做什么,如果我在视图中设置TempData
存储库,它都不会转到控制器?我应该使用ViewData
吗?你对这样的系统有什么建议?
由于
答案 0 :(得分:2)
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种技术:
<form>
与包含将数据发送到服务器的输入字段答案 1 :(得分:2)
您应该在呈现视图的控制器中预先设置TempData
值。然后,该值将由呈现第二个(ActionLink)视图的控制器操作获取。