在某些情况下,我需要在 Controller 操作之间传递一个值。
当将 returnUrl 从 View 传递到所有嵌套 View 时。在里面 查看我有
@{ TempData["returnURL"] = Request.Url.AbsoluteUri; }
然后以类似的方式访问它(在我的真实版本中我 检查 key 是否在 TempData 中以及 returnURL 是否真实 网址):
return Redirect(TempData["returnURL"].ToString());
如果它需要在第一页更改之后继续(即搜索 page -> Edit page -> Edit Section page)我又来加了
TempData["returnURL"] = TempData["returnURL"];
当我需要通过一个 Controller Action 传递一个值时 查看由 ajax 调用的另一个 Controller 操作,例如 这里:
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 的 Action Controller 中访问它:
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); }
我的问题是,这真的是不好的做法吗?根据我对它的理解,我本质上是在像 session cookie 一样使用 TempData。有没有更好的方法来做到这一点,比如使用实际的 cookie?
最佳答案
是的,我会说这通常是不好的做法。虽然 ViewData 字典方法快速且相当容易实现,但它可能会导致拼写错误和编译时未发现的错误。另一种方法是使用 ViewModel 模式,它允许您为需要在其中公开值或内容的特定 View 使用强类型类。最终为您提供类型安全和编译时检查以及智能感知。
我的第一选择是使用 View 模型。如果这不合适,那么使用 session 状态可能就很好。
关于c# - 使用 TempData 在 Controller 操作之间传递细节是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604778/