所以,我有这个变量,我通过POST从我的视图中的表单推入控制器.
然后我将变量推入viewdata,以便下一个视图可以使用它.但是该视图不需要表单,所以我无法将相同的变量推送到下一个控制器.简而言之,从控制器来回查看和反转信息是很麻烦的,所以我正在寻找一种方法来保持控制器中的全局变量存活,以便所有操作结果都可以访问...我的计划细分是这个......
-User types a "name"
-I send "name" to controller.
-I push 'name' into viewstate (query entity framework to get a list of stuff 'name'
has access to) and return that list into the view.
-In that view I can access the 'name' since it was in view state.
-Clicking on a link inside the page takes me to another controller where I need
to get access to 'name' WITHOUT passing view Routing or POST.
Run Code Online (Sandbox Code Playgroud)
显然,最简单的方法是在全球范围内声明"名称",然后它总是可用,但对于我的生活,我无法弄清楚如何.
您是否考虑过将其存储在会话中?
这将允许您从控制器或视图轻松访问它,并避免需要全局变量.
储存:
[HttpPost]
public ActionResult YourPostMethod(string name)
{
Session["Name"] = "yourName";
}
Run Code Online (Sandbox Code Playgroud)
访问:*
确保在抓取它之前检查它是否存在:
var whatsMyName = (Session["Name"] != null) ? Session["Name"] : "";
Run Code Online (Sandbox Code Playgroud)
可扩展性考虑
值得一提的是,MVC应用程序旨在模仿Web并且是无状态的.介绍Session变量会改变这一点,因此请注意它可能会引入有关可伸缩性等问题.
在会话中存储数据的每个用户将占用服务器级别的资源.根据用户数量以及您在会话中存储的内容,如果这些值变得太大,您可能会耗尽内存.
| 归档时间: |
|
| 查看次数: |
12193 次 |
| 最近记录: |