我应该通过 RedirectToAction 或 TempData 传递值吗?

2023-12-09

我看过一些文章(甚至 MSDN)建议使用 TempData 在 ActionMethods 之间传递数据。但我在这里看到其他人说应该避免使用 TempData。解决这个问题的最佳实践方法是什么?

这是一些代码来显示我的情况。 注意:我百分百确定,我做错了。这就是我来这里的原因。 :) 另外,直到最近我一直在做 Webforms。

Note2: 这是相关的,但并不相同。

View:

<div>
    @using (Html.BeginForm("Previous", "Home", new {month = @month}, FormMethod.Post)) 
    {
        <input id="previous" type="submit" value="Previous" />
    }

    // This fails but that's another situation
    @using (Html.BeginForm("Next", "Home", new {month = @month, year = @year}, FormMethod.Post))
    {
        <input id="next" type="submit" value="Next" />
    }
</div>

控制器方法:

[HttpPost]
public ActionResult Previous(HTMLMVCCalendar.Models.MonthModel prevMonth)
{
    Calendar monthEventsCal = new Calendar();

    int month = prevMonth.Month;
    int year = prevMonth.Year;

    var newMonth = monthEventsCal.previousMonth(year, month);

    month = newMonth.Item2;
    year = newMonth.Item1;

    return RedirectToAction("Index", "Home", new { month = month });
}

[HttpPost]
public ActionResult Next(HTMLMVCCalendar.Models.MonthModel nextMonth)
{
    Calendar monthEventsCal = new Calendar();

    int month = nextMonth.Month;
    int year = nextMonth.Year;

    var newMonth = monthEventsCal.nextMonth(year, month);

    month = newMonth.Item2;
    year = newMonth.Item1;

    return RedirectToAction("Index", "Home", new { year = year, month = month });
}

听起来您的行动方法与最终结果耦合得太紧密了。

我会稍微重构一下;你的索引方法会像这样:

 public ActionResult Index()
 {
      HTMLMVCCalendar.Models.MonthModel someModel = new HTMLMVCCalendar.Models.MonthModel();

      someModel.DateTime = DateTime.Now; // whatever

      return View(someModel);
 }

然后,当您需要重新计算日历时,您只需发布到相同的 URL,该 URL 将返回带有新视图模型数据的相同视图。

 [HttpPost]
 public ActionResult Index(HTMLMVCCalendar.Models.MonthModel previousModel, bool? goForward)
 {
      if(goForward.HasValue && goForward.Value)
            previousModel.DateTime = previousModel.DateTime.AddMonths(1);
      else
            previousModel.DateTime = previousModel.DateTime.AddMonths(-1);

      return View(previousModel);
 }

您保持在相同的 URL 上并呈现相同的视图,但进行了所需的更改。您不需要为每个操作指定一个特定端点。

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

我应该通过 RedirectToAction 或 TempData 传递值吗? 的相关文章

  • 在 WCF 上重用我的 PagedList 对象

    问题 我有一个自定义集合PagedList
  • strtok() 使用安全吗[重复]

    这个问题在这里已经有答案了 我读到了很多负面的东西strtok 有人说它已经过时 有人说它不是线程安全的 等等 那么真相是什么 我可以使用吗strtok 它是线程安全的吗 Note 我正在使用 Visual C 您可以使用它 它是标准库的一
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • 头文件中实现的函数的静态与内联

    我想到的方式inline在 C 中用于链接 作用域 我把它放在同一个篮子里extern and static对于全局对象 通常 对于在头文件中实现的函数 我的首选解决方案是将其设为静态 In Foo h static void foo Do
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • 您认为 ASP.NET MVC 会与 ASP.NET Webforms 竞争吗?

    您认为 ASP NET MVC 会在 Microsoft Web 开发市场中占据重要份额吗 还是会占市场的 10 15 哦是的 它将让 Web 表单脱颖而出 我们已经看到了真正的 MVC 框架在 Java 世界中的价值 在 MS 世界中 这
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • asp.net mvc - Ajax 刷新视图的每个元素

    希望在退出 jquery 对话框后使用 ajax 刷新当前页面 我有一个包含 foreach 循环的视图 数据是从模型中提取的 每个循环有 2 个编辑 删除按钮 当我单击 编辑按钮 时 将打开一个 jquery UI 对话框进行编辑 当我保
  • 如果finally 块包含await,为什么*有时*不会在ThreadAbortException 上执行?

    UPDATE 我不认为这个问题是重复的ThreadAbortException最后可以跳过吗 https stackoverflow com questions 18002668 can threadabortexception skip
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 将许多表转换为 Excel 列

    我创建了用于文章审阅的网络应用程序 我有一个名为 Article 的表 每个表Article有一些ArticleReview Article ArticleId ArticleTitle NumberOfComment NumberOfVi
  • 展开 std::reference_wrapper 的成本

    Given include
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 如何将jquery.post中的数据发送到使用ViewModel作为参数的mvc控制器?

    我正在使用 ASP NET MVC 编写应用程序 我有带有操作的控制器 它使用一些 ViewModel 作为参数 如何使用 jquery post 将表单数据发送到该 mvc 控制器 post Yourcontroller YourActi
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有
  • 如何根据当前日期时间发现财政年度?

    我需要基于当前或今天的日期时间的财政年度 假设我们认为今天的日期是10 April 2011 那么我需要输出为Financial Year 2012在某些情况下 我需要以短格式显示相同的输出FY12 我想以两种方式显示 在我们的要求中 考虑

随机推荐

  • 如何在UIWebView中设置自定义字体?

    我在资源中有一个字体 并将其加载到 UIFont 中 我想知道如何使用这个 UIFont 作为我的 UIWebView 的默认字体 提前致谢 如果您使用网页在WebView中显示 这就是我要做的 使用 HTML 页面的标题创建一个字符串 在
  • 查找并单击具有更改 CSS 选择器的元素 (python)

    我正在编写一个脚本 需要单击页面的某个元素 但是 CSS 选择器每天都会随着元素更改其位置而更改 今天它的名字叫 PPTAmFCTable gt tbody nth child 1 gt tr nth child 11 gt td nth
  • 如何在parallel.for中强制执行有序执行序列?

    我有一个简单的并行循环来做一些事情 然后我将结果保存到文件中 object items array with all items object resultArray new object numItems Parallel For 0 n
  • JavaScript 中的 setTimeout 与 setInterval

    您好 我们可以将 setInterval 更改为 setTimeout 函数吗 它工作正常 我想知道它可以通过 setTimeout 完成吗
  • 将捆绑包发送到另一个活动

    我正在尝试将一个包从一项活动发送到另一项活动 当我在接收活动中加载包时 所有信息似乎都是空的 这是一些代码 活动A 发送包 public void onItemClick AdapterView
  • 在 PHPExcel 中按列和行获取单元格作为字符串

    我正在尝试将可能带有尾随零的单元格读取为字符串而不是数字 它会去掉前导零 单元格由整数列 行读取 如下所示 而不是像这样的列字符串answer has 初始代码 instReader reader gt load this gt file
  • 如何转义字符串中的双引号?

    我希望双引号出现在以下字符串中 因此它看起来像 hi there 这是我正在使用的代码 NSMutableString s NSMutableString alloc init s appendString s appendString h
  • STM32F4 通过软复位跳转到引导加载程序,无需 BOOT0 和 BOOT1 引脚

    我问这个问题是因为可以在这里找到类似问题的答案 通过应用程序跳转到 STM32 中的引导加载程序 即从用户闪存在引导模式下使用引导 0 和引导 1 引脚 用户 JF002 JF002回答 当我想跳转到引导加载程序时 我在其中一个备份寄存器中
  • PHPUnit 跳过所有测试

    当我尝试运行 PHPUnit 时 所有测试都会立即跳过 没有错误或任何东西 有人能指出我正确的方向吗 vagrant vagrant selenium phpunit PHPUnit 3 7 28 by Sebastian Bergmann
  • 将对象列表序列化到 XDocument

    我尝试使用以下代码将对象列表序列化到 XDocument 中 但收到错误消息 无法将非空白字符添加到内容中 public XDocument GetEngagement MyApplication application ProxyClie
  • 自定义具有多个值的工具提示

    我正在研究 angularjs 谷歌图表堆积栏 我想自定义堆叠栏上显示的工具提示数据 想要在鼠标悬停在堆叠栏上时显示该栏的所有堆栈信息 目前仅显示当前鼠标悬停在堆栈上的信息 请找到演示http plnkr co edit ahg7JiBpO
  • 使用 iTextSharp 位于底部的 PDF 页脚

    我正在尝试使用 iTextSharp 5 0 6 在 C 中创建 pdf 文档 我想分别在 OnStartPage 和 OnEndPage 事件中向每个页面添加页眉和页脚 对于页脚 存在一个问题 即页脚是在页面结束的位置创建的 而我希望位于
  • 如何通过从另一个数据框中随机选择来创建数据框?

    DP 1 DP 2 DP 3 DP 4 DP 5 DP 6 DP 7 DP 8 DP 9 DP 10 0 519 1 117 1 152 0 772 1 490 0 850 1 189 0 759 0 030 0 047 0 632 0 6
  • object[foo] 术语是什么意思?

    我很困惑什么object foo 术语指的是 有什么提示吗 我知道bar unique prop and bar unique prop指的是2 var foo unique prop 1 var bar unique prop 2 var
  • Flutter Firebase 身份验证忽略标头 X-Firebase-Locale,因为其值为 null

    我正在尝试通过电子邮件和密码注册和登录将 Firebase 身份验证添加到我的应用程序 当我测试它时 它不会导航到下一个屏幕 并且我收到以下消息 忽略标头 X Firebase Locale 因为它为空 但是 当我转到 Firebase 时
  • 循环遍历元素不起作用

    我想检查一下是否this元素具有与所有其他元素匹配的数据属性值 但循环并不总是有效 下面精简了代码 HTML div class list div class target div div class target div div clas
  • 根据缺失变量的数量对观测值进行计数

    我想根据缺少的变量数量来计算数据框的行数 因此 例如在下面的数据框中 我希望代码返回列表 3 5 1 1 0 因为有 3 行没有缺失变量 5 行有 1 个缺失变量 1 行有 2 个缺失变量 1 行有 3 个缺失变量 0 行有 4 个缺失变量
  • Tomcat6 -> 如何将项目放入根文件夹?

    我在 Linux 服务器上有一个 Tomcat6 服务器 的结构webapps目录是 examples 主机管理器 manager ROOT sample 我有一个 Web 应用程序在 Tomcat 上的本地主机上运行 我创建了一个战争文件
  • 在 MATLAB 中在地图上绘制点

    我想在纽约州地图上绘制不同的位置 我当前的代码绘制了整个北美 因为我找不到如何仅绘制一个州 我正在尝试设置纽约州的纬度和经度限制 但它仍然给我整个国家 另外 当我这样做时hold all or hold on 并尝试绘制点 我得到另一个带有
  • 我应该通过 RedirectToAction 或 TempData 传递值吗?

    我看过一些文章 甚至 MSDN 建议使用 TempData 在 ActionMethods 之间传递数据 但我在这里看到其他人说应该避免使用 TempData 解决这个问题的最佳实践方法是什么 这是一些代码来显示我的情况 注意 我百分百确定