在多个控制器操作中保留值

2023-12-15

在我的控制器中,我有一个数据库中对象的 ID,并且多个操作需要此 ID 来访问该对象。该 ID 是在Index操作并用于填充视图模型。我获取 ID 的方式是通过一个参数,EPiServer(CMS 外)将Index行动,所以我无法在其他地方得到它。

我的问题是,有什么方法可以让我的操作可以访问此 ID,而无需在客户端使用隐藏字段等?

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


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

Cookies

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

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

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

Pros:跨多个请求保持不变,而无需在请求之间执行任何操作。

Cons:轻松关闭客户端。

会话状态

使用以下命令将值添加到会话状态Session收藏。

/* Setting */
Session["id"] = "myId";

/* Getting */
var myId = Session["id"] != null ? Session["id"].ToString() : String.Empty;

Pros:易于使用,跨多个请求持续存在

Cons:如果用户打开多个选项卡、使用“后退”按钮等,可能会变得非常混乱。通常是不可预测的。

隐藏字段

将值添加到隐藏字段,并在下一个 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;
}

Pros:没有足迹。干净、简单、无状态且高效。

Cons:对于跨 GET 请求进行持久化没有好处。一次仅在一个 POST 中持续存在。

请求参数

将值添加为重定向上的查询字符串参数。

/* View */
@Html.ActionLink("Go!", "MyAction", new { identifier = "myId" })

/* Controller */
public ActionResult MyAction(string identifier)
{
    var id = identifier ?? String.Empty;
}

Pros:与隐藏字段不同,可用于 GET 请求。

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

什么是最好的?

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多个控制器操作中保留值 的相关文章

  • mvc3中如何通过ajax调用局部视图

    我需要通过ajax调用部分视图 我已尝试以下操作 但我不确定如何完成 UserName change function var userid UserName val var ProvincialStateID State val var
  • mvc3 中的小数错误 - 该值对于字段无效

    我正在关注 ASP NET MVC 3 入门 1 我无法添加 编辑 Price 9 99 或 9 99 的值 它说 值 9 99 对 Price 无效 和 价格字段必须是数字 如何解决这个问题 Model public class Movi
  • 在 MVC 中重用 WPF ViewModel 是否可行?

    我们有一个用 WPF WCF 编写的富客户端应用程序 并打算在 ASP net 中创建一个配套网站 如果可能 使用 MVC 我被要求弄清楚我们当前的代码库中有多少是可以重用的 由一个单独的团队 而且我对 ASP net 几乎没有经验 我们将
  • 实体框架迁移 - 启用自动迁移以及添加的迁移

    我在我的项目中使用实体框架 4 3 迁移 我想使用自动迁移 以便当我对域对象和上下文类进行修改时 我的数据库会在运行项目时自动更新 到目前为止我已经完成了这个工作 除了自动迁移之外 我还想使用一些添加的迁移 并且我希望应用程序在运行应用程序
  • 模型绑定到 MVC 中的列表

    我无法在服务器端检索简单的列表 有人能指出我正确的方向吗 public class TestList public string id get set public string name get set public string loc
  • 自定义 ViewEngine ASP.NET MVC 3

    我正在为 ASP NET MVC 的自定义视图引擎寻找最简单的解决方案 这样我就可以超越路径来寻找视图 实际上 我正在尝试在我的解决方案中构建一个主题系统 我查看了网络 但发现了很难学习和实施的解决方案 Thanks 这就是我用的 它在主题
  • Razor 视图中的内联 If

    在我的控制器中 我有内联 If 语句 ViewBag NameSortParam If String IsNullOrEmpty sortOrder Name desc 在我看来 如果出现以下情况 我似乎无法使用内联 Code If Tru
  • 使用模型优先方法时如何播种数据?

    所以我正在学习MVC3和EF4 我尝试了代码优先方法 但它对我来说太混乱了 我可以毫无问题地创建类 但最困难的部分是处理外键和彼此之间的关系 但我首先选择了模型 这样我就可以直观地设计它并查看关系在哪里 创建模型后 它会为我创建一个 SQL
  • 在Application_Start中访问ninject内核

    我正在使用 Ninject 和随 nuget 安装的 MVC3 扩展 我的内核设置代码位于 App Start NinjectMVC3 cs 文件中 控制器中的一切都运行良好 但我无法弄清楚如何 正确 绑定 Global asax cs M
  • 如何为 Html.BuildUrlFromExpression 调用指定默认区域

    我有这样的问题链接文本 https stackoverflow com questions 2345293 how to specify default area without adding area to every actionlin
  • mvc3,你能给控制器一个显示名称吗?

    我用的是mvc3 是否可以为控制器和操作指定显示名称 DisplayName Facebook Employee public class EmployeeController Controller 在我的面包屑中 我将获得控制器名称和操作
  • 如何将动态数据写入 MVC 3 Razor 中的页面布局?

    我有带有 Razor 引擎的 MVC 3 C 项目 将动态数据写入 Layout cshtml 的方法和最佳实践是什么 例如 也许我想在网站的右上角显示用户名 该名称来自会话 数据库或基于用户登录的任何内容 更新 我也在寻找将某些数据渲染到
  • 使用资源字符串的 DisplayFormat 数据注释

    我想使用 DisplayFormat 数据注释来格式化模型数据 但我想使用资源文件中存储的格式字符串 我已经能够将资源类型和名称传递给某些数据注释 例如指定错误消息时 如何告诉 DisplayFormat 从我的资源文件之一获取格式字符串
  • asp.net mvc - Ajax 刷新视图的每个元素

    希望在退出 jquery 对话框后使用 ajax 刷新当前页面 我有一个包含 foreach 循环的视图 数据是从模型中提取的 每个循环有 2 个编辑 删除按钮 当我单击 编辑按钮 时 将打开一个 jquery UI 对话框进行编辑 当我保
  • Azure 网站中的 404 处理

    我在 Azure 上有一个 MVC 网站 我已经编写了一个控制器操作来代表资源 该操作应该返回 HTTP 404 但正文内容应该是一些 HTML 我在其中解释了 404 的原因 这是作为一个标准操作实现的 该操作设置Response Sta
  • 目标中的 clr.dll 版本与构建的 mscordacwks.dll 版本不匹配

    我正在使用 NET Framework 4 0 开发 ASP NET MVC 3 应用程序 当我去调试我的应用程序时 我收到消息 无法附加到应用程序 webdev webserver 目标中的 clr dll 版本与构建 mcordacwk
  • Razor 如何创建一个复选框并使其只读?

    我正在使用 MVC 3 和 Razor 目前我正在使用 model MyProject ViewModels MyViewModel foreach var item in Model MyProperty tr td Html Actio
  • 为什么要调用base.OnActionExecuting(filterContext);?

    我只是在看我的一些旧代码 我有一个动作过滤器 OnActionExecuting 方法 最后我有 base OnActionExecuting filterContext 为什么到处搜索我都看到这个很多次了 我还看到 在我的旧授权标签中 我
  • 可排序的 Telerik 网格 + NHibernate、IQueryable 和 ASP.NET MVC

    我正在尝试让 Telerik 网格工作 分页工作正常 我的视图代码如下所示 Html Telerik Grid Model Name Grid Columns columns gt columns Bound o gt o ItemName
  • 从 Orchard 内的主题渲染图像

    我刚刚选择 Orchard 来构建我的博客 作为创建这个新博客的努力的一部分 我正在创建一个自定义主题 这个自定义主题同时具有 CSS 和图像 我的问题 我的问题基本上可以归结为 如何渲染属于主题一部分的图像 到目前为止我已经尝试过的 我尝

随机推荐

  • UIApperance和各种崩溃

    我在自定义我的应用程序时感到非常沮丧 我已经创建并设计了几乎整个应用程序的样式 包括导航栏 工具栏 tabBar 等 但每次 MFMailComposeViewController MFMessageComposerViewControll
  • 正则表达式查找特定长度的数字,但可以包含除其之前或之后的数字之外的任何字符

    我正在尝试制定一个正则表达式模式来搜索字符串中的 12 位数字 该数字可以在我要查找的字符的前面或后面包含任意数量的其他字符 但不能是数字 到目前为止我已经 0 9 12 它可以正确找到 12 位数字 但它也会匹配字符串中的 13 位数字
  • (C++) 与命名空间链接会导致重复符号错误

    在过去的几天里 我一直在尝试弄清楚如何链接我一直在从事的 CLI 游戏项目的文件 该项目有两部分 客户端代码和服务器代码 客户需要我制作的两个库 第一个是通用游戏板 它分为 GameEngine h 和 GameEngine cpp 头文件
  • 从 NodeJS 中的 get 请求流式传输 axios 响应

    我正在寻找在节点程序中使用 axios 向方法 myMethod 发送 返回 可读流 gt 我想将响应流式传输到可用于发送给 myMethod 调用者的 ReadableStream This code does nt work but t
  • 使用 d3.json 从 PHP 输出 JSON

    我创建了一个 PHP 文件来查询 JSON 输出 特定过滤器 testPHP php number 123 的 PHP 文件的 JSON 输出是 source AB target AC type true source UB target
  • 我可以添加自定义 modbar 按钮吗?

    我有一个自动缩放 y 轴的函数 它接收图形和重新布局数据对象 然后输出符合我预先确定的某些标准的 y 轴 我想在 python 上的 dash 中添加一个新的 modbar 按钮 该按钮会在我点击它时触发该函数并更新图形 那可能吗 一个简单
  • 如何减少Python中大列表使用的内存

    我正在编写一个程序 它工作正常 但是当它将数据库 100MB 文本文件 加载到列表时 它的内存使用量变成 700 800MB 用于将文件加载到列表的代码 database db open database db hdb dbcontent
  • 使用 BERT (TF 1.x) 保存的模型执行推理

    我被困在一行代码结果整个周末一个项目都被搁置了 我正在开发一个使用 BERT 进行句子分类的项目 我已经成功训练了模型 并且可以使用 run classifier py 中的示例代码来测试结果 我可以使用此示例代码导出模型 该代码已多次重新
  • 这是 GAC 的所在地吗?

    这是 GAC 的所在地吗 C Windows Microsoft NET assembly GAC MSIL 如果是这样 那么什么是C Windows assembly 答案取决于所使用的 NET Framework 的版本 多个版本可以并
  • 将设备指针传递给 cublasSnrm2 时出现分段错误

    下面的 cublas 代码给了我们错误 core dumped while being at cublasSnrm2 handle row dy incy de 你能给一些建议吗 main cu include
  • 如何从 MySQL 表中获取所有数据组合? [复制]

    这个问题在这里已经有答案了 在过去的五个小时里 我一直试图从表格中获取每种产品选项组合 但现在我完全陷入困境 我有一个表 其中包含如下数据 简化 CREATE TABLE assigned options option id int 10
  • 如何将 C 文件编译为可执行 (.exe) 文件?

    我不确定在 Windows 7 下使用 Cygwin 将 C 文件编译为可执行文件 谁能告诉我该怎么做吗 我读过一些教程但仍然不明白 我知道我需要一个Makefile 但是我应该在其中写入什么才能在编译过程后获得可执行文件呢 一开始我会说安
  • Spring:无法将模拟注入到使用 @Aspect 注释的类中

    我使用 AspectJ 创建了一个 Before 建议 package test accesscontrol permissionchecker import test accesscontrol database SessionExpir
  • 编写 JUnit 测试

    拜托 我是Java新手 如何为以下程序编写 JUnit 测试 要测试的程序 package codekeeper author henryjoseph import java util import java io public class
  • Conda 仅为 env 设置 LD_LIBRARY_PATH [重复]

    这个问题在这里已经有答案了 我安装了 miniconda3 其中创建了一个名为 py35 的虚拟环境 我有一些只想在这个环境中使用的库 因此他们处于 miniconda3 envs py35 libs 但是 由于 LD LIBRARY PA
  • Java JsonObject 数组值到键

    我是java新手 所以这有点令人困惑 我想获取json格式的字符串 我想要的结果是 user name lamis 我目前正在做的是这样的 JSONObject json new JSONObject json put name Lamis
  • .net 位图改变图像的颜色

    我正在尝试调整图像大小而不丢失任何颜色 但我无法让它发挥作用 看下图 上一张是原图 下一张是经过 NET的 我的问题是 如何保留颜色 我尝试了很多不同的设置 寻找 GDI 错误 更改调色板 将 ImageAttributes 更改为人们在互
  • 聚合与组合

    我想知道之间的关系是Human and a Driver License聚合还是组合 我很清楚Room and a Building关系是一个组合和一个Chair and a Room是一个聚合 但一个Driver License可以在没有
  • Visual Studio 2022 - v.17.6.5 - 在 _Layout.cshtml 中链接安装的 nuget 包 css 文件

    我创建了一个新的 net 6 0 MVC Web project并删除了预装的bootstrap from wwwroot lib因为我想添加它NuGet Package Manager 安装软件包后 文件将显示在我的中作为参考wwwroo
  • 在多个控制器操作中保留值

    在我的控制器中 我有一个数据库中对象的 ID 并且多个操作需要此 ID 来访问该对象 该 ID 是在Index操作并用于填充视图模型 我获取 ID 的方式是通过一个参数 EPiServer CMS 外 将Index行动 所以我无法在其他地方