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

标签 asp.net-mvc redirect

我有一个 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/

相关文章:

asp.net-mvc - ASP.NET中MVC应用程序的结构应该是什么?

asp.net-mvc - ASP.NET MVC 中 RavenDB 中的 Multi-Tenancy 索引

html - 从整个页面的 html 框架重定向

apache - 将所有http请求(包括子域)重定向到https

apache - htaccess 页面到页面重定向和 seo 友好的 url

php - PHPs fopen 会遵循 301 重定向吗?

asp.net - ASP MVC ActionLink 导致 URL 无效

c# - 这是依赖注入(inject)的错误使用吗?

asp.net-mvc - 使用 Knockout.js (MVC Razor) 将复选框绑定(bind)到数组

.net - 302 重定向很慢 (IIS6)