РЕДАКТИРОВАТЬ: Извините, первоначально не видел вашу заметку о нежелании использовать TempData.
В двух словах - хотите ли вы, чтобы ваше сообщение появлялось снова, если клиент обновляет / перезагружает страницу, на которой он былперенаправляется на?
Если вы это сделаете, то используйте строку запроса, например:
return(RedirectToAction("Index", new { message = "hi there!" }));
, а затем либо определите
public ActionResult Index(string message) { }
, либо явно вытяните Request.QueryString["message"] и передайте его в View через ViewData обычным способом.Это также будет работать в браузерах, которые не принимают файлы cookie с вашего сайта.
Если вы НЕ хотите, чтобы сообщение отображалось снова, тогда ASP.NET MVC 1.0 предоставляет коллекцию TempData именно для этой цели.
Значения свойств TempData хранятся в состоянии сеанса до следующего запроса от того же браузера , после чего они очищаются - поэтому, если вы поместите что-то в TempData непосредственно перед возвратом RedirectToAction, это будетдоступно в результате перенаправления, но будет очищено сразу после этого.
Вот простое изменение HomeController в проекте запуска ASP.NET MVC:
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>
Вы заметите, что сообщение TempData отображается сразу после последовательности POST-REDIRECT-GET, но если вы обновите страницу, она выиграетбольше не будет отображаться.
Обратите внимание, что это поведение изменилось в ASP.NET MVC 2 - см. «Passin».g Состояние между методами действий »в этой статье для получения дополнительной информации.