加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 18:50:48 所属栏目:asp.Net 来源:网络整理
导读:我有一个控制器,处理三个特定于我的问题的操作。 第一个是编辑操作,它返回具有HTML表单的视图,用户可以编辑给定项目上的属性。 第二个是更新操作,它接受从浏览器返回的更新并更新数据库。当更新成功时,我们执行重定向到操作。 第三个是显示给定项目的细
我有一个控制器,处理三个特定于我的问题的操作。

第一个是编辑操作,它返回具有HTML表单的视图,用户可以编辑给定项目上的属性。

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

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

流程是:

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

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

RouteValueDictionary dict = Foo.GetRouteValues(bar);

RedirectToAction("Show",dict);

我已经阅读了这个问题,但是关于使用TempData属性,如果我不必要。

Question

感谢您的一些建议!

解决方法

编辑:对不起,最初没有看到你的笔记,不想使用TempData。

简而言之,如果客户端刷新/重新加载他们已重定向到的页面,您是否希望您的邮件重新出现?

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

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

然后定义

public ActionResult Index(string message) { }

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

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

TempData属性值存储在会话状态,直到来自同一浏览器的下一个请求,之后它们被清除 – 所以如果你在返回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();
}

和相应的视图/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>

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读