Я знаю, что это немного старо, но...
Что я делал в прошлом, так это то, что класс «MessageArea» выставлялся как свойство на моем базовом контроллере, от которого в конечном итоге наследуются все мои контроллеры. Свойство фактически хранит экземпляр класса в TempData. MessageArea имеет метод Add(), который принимает строковое сообщение и тип перечисления (например, Success, Error, Warning, Information).
Затем у меня есть партиал, который отображает любые сообщения в MessageArea с соответствующим стилем в соответствии с типом сообщения.
У меня есть метод расширения HTMLHelper RenderMessageArea(), поэтому в любом представлении я могу просто сказать @Html.RenderMessageArea(), метод и партиал заботятся о нулях, и ничего не выводится, если нет сообщений.
Поскольку данные, хранящиеся в TempData, выдерживают только 1 запрос, это идеально подходит для случаев, когда вы хотите, чтобы ваше действие перенаправляло, но на целевой странице отображалось 1 или более сообщений, например. ошибка, неавторизованная страница и т. д. Или если вы добавляете элемент, но затем возвращаетесь на страницу индексного списка.
Очевидно, вы могли бы реализовать что-то подобное для передачи других данных. В конечном счете, я бы сказал, что это лучшее решение исходного вопроса, чем принятый ответ.
РЕДАКТИРОВАТЬ, ПРИМЕР:
public class MessageAreaModel {
public MessageAreaModel() {
Messages = new List<Message>();
}
public List<Message> Messages { get; private set; }
public static void AddMessage(string text, MessageIcon icon, TempDatadictionary tempData) {
AddMessage(new Message(icon, text), tempData);
}
public static void AddMessage(Message message, TempDataDictionary tempData) {
var msgArea = GetAreaModelOrNew(tempData);
msgArea.Messages.Add(message);
tempData[TempDataKey] = msgArea;
}
private static MessageAreaModel GetAreaModelOrNew(TempDataDictionary tempData) {
return tempData[TempDataKey] as MessageAreaModel ?? new MessageAreaModel();
}
Вышеупомянутый класс затем можно использовать для добавления сообщений из вашего уровня пользовательского интерфейса, используемого контроллерами.
Затем добавьте расширение HtmlHelper следующим образом:
public static void RenderMessageArea(this HtmlHelper html) {
html.RenderPartial("MessageArea",
(MessageAreaModel)html.ViewContext.TempData[MessageAreaModel.TempDataKey] ?? MessageAreaModel.Empty);
html.ViewContext.TempData.Remove(MessageAreaModel.TempDataKey);
}
Вышеупомянутый код не полностью завершен, есть различные навороты, которые я не упомянул, но у вас сложилось впечатление.
person
Peter
schedule
16.04.2013