asp.net-mvc-3 – 跨多个控制器操作保持值
在我的控制器中,我有一个ID到数据库中的对象,并且多个动作需要此id来访问该对象.此ID在“索引”操作中获取,用于填充视图模型.我获取ID的方式是通过一个参数,EPiServer(输出CMS)通过了索引操作,所以我无法在其他任何地方获得它.
我的问题是,有没有办法让我的行为可以访问此ID而无需在客户端使用隐藏字段等? 我想尽量避免发送额外的数据,这不是一个很好的解决方案. 解决方法
我不确定你的意思是“这不是一个好的解决方案”,因为使用隐藏字段可能是在多个帖子中保存数据的最干净方法.请记住,HTTP是 – 并且应该被视为 – 无状态协议.但是,还有一些其他选择:
饼干 将值添加到控制器中的cookie并将其添加到Response对象.然后,拿起它并在需要时使用Request.Cookies读取它. /* Setting */ Response.Cookies["id"].Value = "myId"; /* Getting */ var id = Request.Cookies["id"] != null ? Request.Cookies["id"].Value : String.Empty; 优点:坚持多个请求,而无需在两者之间的请求中执行任何操作. 缺点:轻松关闭客户端. 会话状态 使用Session集合将值添加到会话状态. /* Setting */ Session["id"] = "myId"; /* Getting */ var myId = Session["id"] != null ? Session["id"].ToString() : String.Empty; 优点:易于使用,坚持多个请求 缺点:如果用户打开了多个标签,使用“后退”按钮等,可能会变得非常混乱.通常无法预测. 隐藏的领域 将值添加到隐藏字段,并在下一个POST时备份该值. /* View (assuming string model property 'Id') */ @Html.BeginForm("MyAction","MyController") { @Html.HiddenFor(m => m.Id) <input type="submit" value="Submit" /> } /* Controller */ public ActionResult MyAction(MyModel model) { var id = model.Id; } 优点:没有足迹.干净,简单,无状态,高效. 缺点:对于持久化GET请求没有好处.一次只能在一个POST中保留. 请求参数 在重定向上将值添加为查询字符串参数. /* View */ @Html.ActionLink("Go!","MyAction",new { identifier = "myId" }) /* Controller */ public ActionResult MyAction(string identifier) { var id = identifier ?? String.Empty; } 优点:与隐藏字段不同,可用于GET请求. 缺点:要求您实现一种方法,将查询字符串保存在您需要值的所有请求中. 什么是最好的? 就个人而言,我会说 – 在你的情况下 – 使用cookies可能是最好的选择.如果你想在多个请求中持久化而不必处理每个请求中的值(并且没有使用Session的可怕性),那么cookie可能是最简单和最好的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 当注入服务或控制器的依赖关系太多时,重构策
- .net – ashx vs aspx文件下载
- 使用OneLogin和DotNetOpenAuth的ASP.Net单点登录CrossDomai
- asp.net-core – 入口点没有合适的“程序”类型
- asp.net-mvc-4 – 如何通过ASP.NET MVC中的SimpleMembershi
- asp.net-mvc-4 – 在Visual Studio 2017 RC中无法识别ASP.N
- asp.net – 敏捷,Scrum和CMMI TFS流程模板之间有什么区别
- asp.net – 使用[WebMethod]转义的JSON响应
- asp.net-mvc – 在ASP.NET MVC中动态更改主模板
- 你的控制器应该在asp.net-mvc中有多大
- asp.net – 未捕获TypeError:无法读取未定义的属
- ASP.NET MVC中的jQuery CRUD
- asp.net-core – HttpResponse不包含Dot Net Cor
- asp.net – 记录网页的加载时间
- asp.net – Sharepoint列表的开源替代
- 如果没有Visual Studio 2015,我们如何创建.NET
- asp.net – 可以添加一个String.contains多个值吗
- .net – 我无法在我的网络应用程序中使log4net工
- 如何在ASP.net runat =’server’标记中使用传统
- asp.net-mvc-4 – 如何将用户没有正确的角色重定