asp.net-mvc – 重定向到操作,需要传递数据

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 重定向到操作,需要传递数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个控制器,处理三个特定于我的问题的操作。 @H_301_2@第一个是编辑操作,它返回具有HTML表单的视图,用户可以编辑给定项目上的属性

@H_301_2@第二个是更新操作,它接受从浏览器返回的更新并更新数据库。当更新成功时,我们执行重定向到操作。

@H_301_2@第三个是显示给定项目的细节的显示动作。此操作是我们在成功更新后重定向到的地方。

@H_301_2@流程是:

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

@H_301_2@我想要实现的是在更新成功时有一个标志跳闸,以便在下一个显示视图中,我可以显示一个确认消息给用户。问题是,我不是100%肯定的最好的方式通过RedirectToAction()调用来携带这些数据。一个想法,我有使用查询字符串?我们已经携带变量的查询字符串为另一个目的,但我的一部分怀疑,滥用它。对重定向调用如下。

RouteValueDictionary dict = Foo.GetRouteValues(bar);

RedirectToAction("Show",dict);
@H_301_2@我已经阅读了这个问题,但是关于使用TempData属性,如果我不必要。

@H_301_2@Question

@H_301_2@感谢您的一些建议!

解决方法

编辑:对不起,最初没有看到你的笔记,不想使用TempData。 @H_301_2@简而言之,如果客户端刷新/重新加载他们已重定向到的页面,您是否希望您的邮件重新出现?

@H_301_2@如果你这样做,那么使用querystring,类似:

return(RedirectToAction("Index",new { message = "hi there!" }));
@H_301_2@然后定义

public ActionResult Index(string message) { }
@H_301_2@或显式地拉出Request.QueryString [“消息”],并以通常的方式将其传递给View通过ViewData。这也适用于不接受来自您网站的Cookie的浏览器。

@H_301_2@如果不希望消息再次显示,则ASP.NET MVC 1.0为此确切目的提供TempData集合。

@H_301_2@TempData属性值存储在会话状态,直到来自同一浏览器的下一个请求,之后它们被清除 – 所以如果你在返回RedirectToAction之前立即在TempData中添加一些东西,它将在重定向的结果上可用,但会被清除之后立即。

@H_301_2@以下是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();
}
@H_301_2@和相应的视图/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>
@H_301_2@您会注意到在POST-REDIRECT-GET序列之后立即显示TempData消息,但如果刷新页面,则不会再次显示

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

猜你在找的asp.Net相关文章