编辑:抱歉,最初没有看到您关于不想使用 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 属性值存储在会话状态中,直到 来自同一浏览器的下一个请求,之后它们被清除 - 因此,如果您在返回 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 中的“在操作方法之间传递状态”。