Я пытаюсь реализовать что-то вроде Ruby on Rail ActionDispatch::Flash
для передачи сообщений на запрос следующей страницы.Подход, который я хочу использовать, состоит в том, чтобы сохранить пару (частичное имя вида, объект модели) в контексте сеанса и отобразить ее на главной странице при обработке запроса на отображение флэш-сообщения.
Внутри моегоHttpApplication
подкласс У меня теперь есть:
public class Global : System.Web.HttpApplication
{
public class FlashStuff
{
private string flashViewName;
private object model;
public FlashStuff(string flashViewName, object model)
{
this.flashViewName = flashViewName;
this.model = model;
}
public string FlashViewName
{
get { return flashViewName; }
}
public object Model
{
get { return model; }
}
}
internal static void Flash(string flashViewName, object model)
{
HttpContext.Current.Session.Add("flash", new FlashStuff(flashViewName, model));
}
//...
}
У меня также есть BookmarkController
с действием для добавления закладки:
[HandleError]
public class BookmarkController : Controller
{
public ActionResult Add()
{
return View();
}
[HttpPost]
public ActionResult Add(Bookmark_AddModel model)
{
if (ModelState.IsValid)
{
//...
Global.Flash("BookmarkAddedFlash", model);
return RedirectToAction("Index", "Bookmark");
}
//...
}
//...
}
На моей главной странице я хочу что-то вроде:
<% var session = HttpContext.Current.Session;
if (session["flash"] != null)
{
var flashStuff = (MyApp.Web.Global.FlashStuff)session["flash"]; %>
<div><!-- render in here --></div>
<% session.Remove("flash");
} %>
для отображения частичного представления, которое было указано по имени при вызове Global # Flash.
Я хочу использовать представление для флэш-сообщения вместо сохранения сообщения в видеstring
в контексте сеанса, потому что я хочу включить в сообщение URL-адрес:
<%-- BookmarkAddedFlash.ascx --%>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Web.Models.Bookmark_AddModel>" %>
<%: Html.DisplayTextFor(m => m.Url) %> was successfully bookmarked.
И я хочу отображать представление только при выполнении следующего запроса;т. е. один запрос устанавливает флэш-сообщение, а последующий запрос отображает его.
Как мне это сделать?