Хранение списков временного сообщение в ASP.NET в MVC данных tempdata


Я использую следующий код, чтобы хранить временные сообщения об ошибках в данных tempdata, должны быть отображены с моей главной страницы на сайтах, без каких-либо проблем, но это хороший способ сделать это?

Вспомогательный код контроллера:

namespace System.Web.Mvc
{
    public static class Controllers
    {
        public static void SetMessage(this ControllerBase controller, string message)
        {
            List<string> messages = controller.TempData["Messages"] as List<string> ?? new List<string>();
            messages.Add(message);
            controller.TempData["Messages"] = messages;
        }
        public static void SetErrorMessage(this ControllerBase controller, string errorMessage)
        {
            List<string> messages = controller.TempData["ErrorMessages"] as List<string> ?? new List<string>();
            messages.Add(errorMessage);
            controller.TempData["ErrorMessages"] = messages;
        }
    }
}

Пример Использования:

public ActionResult Edit()
{
    // .. do stuff
    this.SetMessage("You edited X.");
    return View();
}

Вот код отрисовки:

<%
    if (TempData["ErrorMessages"] != null)
    {
    %>
        Error Messages
        <%
        foreach (string s in TempData["ErrorMessages"] as List<string>)
        {
            %><%=s%><%
        }
    }

    if (TempData["Messages"] != null)
    {
    %>
        Messages
        <%
        foreach (string s in TempData["Messages"] as List<string>)
        {
            %><%=s%><%
        }
    }
%>

Может вы заметили какие-либо проблемы?



10995
5
задан 16 апреля 2011 в 03:04 Источник Поделиться
Комментарии
1 ответ

В целом, подход, но не использовать данных tempdata если вы ищете, чтобы заполнить эту информацию через редиректы. Данных tempdata поставляется с множеством проблем, и его поведение не совсем то, что вы думаете.

ViewData, с другой стороны, предназначена именно для этой цели, но с оговоркой, что это не распространяется на все редиректы.

Поэтому, если вы хотите, чтобы положить что-то в месте, которое позволяет разработчикам push-сообщения на ваш вид легко, вам нужно предоставить возможность поставить данные в ViewData или данных tempdata, в зависимости от того, хотят ли они, чтобы перенаправить или нет.

Другим вариантом является, чтобы очистить данных tempdata запись вручную после вызова закончилась, но я не рекомендую этот подход.

В качестве финальной точки, ваши имена функций через метод setmessage и SetErrorMessage вводят в заблуждение в том, что они означают, у вас есть одно пятно только на сообщение. Для меня, как для пользователя функции, при этом:

this.SetMessage("Foo");
this.SetMessage("Bar");

Я предполагаю, что мое сообщение сейчас установлен в "бар", но за кулисами это список с "Foo" и "бар". Я бы рекомендовал изменить ваши имена функций, чтобы метод addmessage и AddErrorMessage вместо этого, который подразумевает, что там за кадром-это набор элементов.

5
ответ дан 16 апреля 2011 в 10:04 Источник Поделиться