加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 跨多个控制器操作保持值

发布时间:2020-12-16 06:23:31 所属栏目:asp.Net 来源:网络整理
导读:在我的控制器中,我有一个ID到数据库中的对象,并且多个动作需要此id来访问该对象.此ID在“索引”操作中获取,用于填充视图模型.我获取ID的方式是通过一个参数,EPiServer(输出CMS)通过了索引操作,所以我无法在其他任何地方获得它. 我的问题是,有没有办法让我的
在我的控制器中,我有一个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可能是最简单和最好的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读