【发布时间】:2011-09-30 00:22:16
【问题描述】:
在某些情况下,我需要在控制器操作之间传递值。
-
将 returnUrl 从视图传递到所有嵌套视图时。在里面 查看我有
@{ TempData["returnURL"] = Request.Url.AbsoluteUri; }然后以与此类似的方式访问它(在我的真实版本中,我 检查密钥是否在 TempData 中并且 returnURL 是真实的 网址):
return Redirect(TempData["returnURL"].ToString());如果它需要在第一页更改之后继续(即搜索 页面 -> 编辑页面 -> 编辑部分页面)我再次添加它
TempData["returnURL"] = TempData["returnURL"]; -
当我需要通过一个控制器动作传递一个值时 查看由 ajax 调用的另一个控制器操作,例如 这里:
public ViewResult Index(FormCollection form) { var model = new GridColumnChooserViewModel(); //Select deleted/not deleted rows if (form.HasKeys()) model.ShowRows = (form["deletedDropDown"] == null) ? "Active" : GetOptionByName(form["deletedDropDown"]); TempData["ShowRows"] = model.ShowRows; ... }然后在我的另一个名为 ajax 的动作控制器中访问它:
public JsonResult GetData() { //Select deleted/not deleted rows var showRows = (TempData.ContainsKey("ShowRows") && TempData["ShowRows"] == null) ? "Active" : GetOptionByName(TempData["ShowRows"].ToString()); //refresh tempdata showrows so it is there for next call TempData["ShowRows"] = model.ShowRows; return this.GetDataSource(showRows); }
我的问题是,这真的很糟糕吗?根据我的理解,我本质上是在使用 TempData,就像会话 cookie 一样。有没有更好的方法来做到这一点,比如使用实际的 cookie?
【问题讨论】:
-
仅供参考 -
FormCollection已弃用。 -
视图设置任何东西也是一个坏主意。
-
它在哪里说 FormCollection 已弃用?在 MSDN 上没有提及:msdn.microsoft.com/en-us/library/….
-
使用强类型模型是一种更好的做法。
标签: c# .net asp.net-mvc razor