我有一个控制器在返回视图之前设置TempData,
public ActionResult Edit(int id, int? order)
{
Route route = new Route();
// Do Work
TempData["Route"] = route;
return View(new FormViewModel(route, obj1, obj2));
}
此视图包含一个局部视图,其中一个链接指向另一个名为delete的操作方法,删除链接的代码为:
<%= Html.ActionLink("Delete", "Delete", new { order = item.Order })%>
删除操作方法的代码是:
public ActionResult Delete(int order)
{
Route route = (Route)TempData["Route"];
// Do Work
}
我遇到的问题是当我尝试获取TempData [“Route”]时;从Delete操作方法返回null。
我想知道问题是否是Get而不是Post?如果是这样,我如何从表单中删除ActionMethod?
答案 0 :(得分:7)
TempData在两个请求之间保持不变。 Edit操作中的ReturnView方法返回什么?据我所知,它不是Controller类中定义的标准方法。你是否在这种方法中重定向(即返回RedirectToRouteResult)?
您的编辑和删除操作之间是否还有其他请求?例如ajax请求。
通常,使用TempData持久保存一些东西并不是一个好主意。模式通常如下:
public ActionResult Update()
{
// When you put something into the TempData dictionary you usually
// redirect immediately to an action that will use the object stored
// inside.
TempData["something"] = "something";
return RedirectToAction("success");
}
public ActionResult Success()
{
var something = TempData["something"];
return View();
}
如果您需要长时间保留某些内容,则应使用Session。
答案 1 :(得分:0)
TempData无法正常工作的另一个因素是当您的应用程序位于分布式系统下时。
答案 2 :(得分:0)
我遇到了同样的问题,事实证明我们在SessionStateBehavior
的实施中已经制作了readonly
IControllerFactory
。我将其更改为default
,然后得到与会话状态无关的后续错误以及有关注册表项的内容...此错误已在我的本地计算机上通过启动Windows服务中的Asp.Net State Service
来解决。
TempData要求在请求之间使用会话状态。
希望这有助于某人。