gpt4 book ai didi

asp.net-mvc-3 - 跨多个 Controller 操作保持值

转载 作者:行者123 更新时间:2023-12-01 01:09:26 25 4
gpt4 key购买 nike

在我的 Controller 中,我有一个数据库中对象的 ID,并且多个操作需要此 ID 才能访问该对象。此 ID 在 Index 中获取 Action 并用于填充 View 模型。我获取 ID 的方式是通过一个参数,EPiServer(出 CMS)通过 Index行动,所以我真的无法在其他任何地方得到它。

我的问题是,有没有办法让我的操作可以访问这个 ID,而无需在客户端使用隐藏字段等?

我想尽可能避免发送额外的数据,这并不是一个很好的解决方案。

最佳答案

我不确定您所说的“这不是一个很好的解决方案”是什么意思,因为使用隐藏字段可能是跨多个帖子持久化数据的最干净的方法。请记住,HTTP 是 - 并且应该被视为 - 无状态协议(protocol)。但是,还有一些其他选项需要考虑:

cookies

将值添加到 Controller 中的 cookie 并将其添加到 Response目的。然后,拿起它并在需要时使用 Request.Cookies 阅读。 .

/* Setting */
Response.Cookies["id"].Value = "myId";

/* Getting */
var id = Request.Cookies["id"] != null
? Request.Cookies["id"].Value
: String.Empty;

优点:跨多个请求持续存在,而无需在其间的请求中执行任何操作。

缺点:轻松关闭客户端。

session 状态

使用 Session 将值添加到 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 请求。

缺点:要求您实现一种在需要值的所有请求中保留查询字符串的方法。

什么是最好的?

就个人而言,我会说 - 在你的情况下 - 使用 cookie 可能是最好的选择。如果您想在多个请求中持久化而不必处理每个请求中的值(并且没有使用 Session 的可怕之处),cookie 可能是最简单和最简洁的方法。

关于asp.net-mvc-3 - 跨多个 Controller 操作保持值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16187983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com