gpt4 book ai didi

asp.net-mvc - 重定向至操作并需要传递数据

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

我有一个 Controller ,可以处理针对我的问题的三个操作。

第一个是edit操作,该操作返回一个带有HTML表单的 View ,用户可以在该 View 中编辑给定项目的属性。

第二个是update操作,它接受来自浏览器的回发并更新数据库。更新成功后,我们将重定向至操作。

第三是显示 Action ,显示给定项目的详细信息。成功更新后,我们将重定向到该操作。

流程是:

显示->编辑->更新(成功:y->重定向到显示,n->返回编辑)

我想要实现的是在更新成功时使标志跳闸,以便在下一个“显示” View 中可以为用户显示确认消息。问题是我不确定通过RedirectToAction()调用传输数据的最佳方式是100%。曾经以为我在使用查询字符串?我们已经在查询字符串中附带了变量,用于其他目的,但是我的一部分对此表示怀疑。重定向的调用如下。

RouteValueDictionary dict = Foo.GetRouteValues(bar);

RedirectToAction("Show", dict);

我也已经阅读了这个问题,但是如果不需要的话,对使用TempData属性也很了解。

Question

感谢您的建议!

最佳答案

编辑:对不起,最初没有看到关于不希望使用TempData的注释。

简而言之-如果客户端刷新/重新加载已重定向到的页面,您是否希望重新显示消息?

如果这样做,则使用查询字符串,例如:

return(RedirectToAction("Index", new { message = "hi there!" }));

然后定义
public ActionResult Index(string message) { }

或显式拉出Request.QueryString [“message”]并以通常的方式通过ViewData将其传递给View。这也将在不接受您站点中的cookie的浏览器中起作用。

如果您不想再次显示该消息,则ASP.NET MVC 1.0提供了TempData集合用于此目的。

TempData属性值以 session 状态存储,直到从同一浏览器发出下一个请求 为止,之后它们将被清除-因此,如果您在返回RedirectToAction之前立即在TempData中放入内容,它将在重定向结果上可用,但会之后立即清除。

这是ASP.NET MVC启动项目中对HomeController的简单更改:
public ActionResult Index() {
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string submitButton) {
TempData["message"] = "You clicked " + submitButton;
return(RedirectToAction("Index"));
}

public ActionResult About() {
return View();
}

并且相应的 View /Views/Home/Index.aspx应该包含以下内容:
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<% if (TempData["message"] != null) { %>
<p><%= Html.Encode(TempData["message"]) %></p>
<% } %>
<% using (Html.BeginForm()) { %>
<input type="submit" name="submitButton" value="Button One" />
<input type="submit" name="submitButton" value="Button Two" />
<% } %>
</asp:Content>

您会注意到TempData消息在POST-REDIRECT-GET序列之后立即显示,但是如果刷新页面,则不会再次显示它。

请注意,此行为在ASP.NET MVC 2中已更改-有关更多信息,请参见this article中的“在操作方法之间传递状态”。

关于asp.net-mvc - 重定向至操作并需要传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3363842/

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