Сохранение сообщения об ошибке в нескольких прыжках в ASP.NET MVC - PullRequest
0 голосов
/ 20 августа 2009

Представьте, что у вас есть n страниц, каждая из которых приблизительно использует одну и ту же модель, но эта модель должна находиться в определенном состоянии, прежде чем вы сможете получить доступ к определенным страницам.

Таким образом, если пользователь вводит URL-адрес, чтобы перевести их на страницу m, но эта страница в данный момент недоступна, контроллер добавляет сообщение об ошибке в коллекцию ошибок в TempData, а затем перенаправляет на страницу m-1.

Проблема в том, что страница m-1 также недоступна. Если мы добавим сообщение в ту же коллекцию (с тем же ключом) в TempData, мы не увидим его на странице m-2, поскольку оно удаляется из TempData до начала выполнения запроса для страницы m-2.

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

EDIT:

Вот о чем я думал:

    protected void AddError(string error)
    {
        int keyCounter;
        var errors = GetErrors(out keyCounter);

        errors.Add(error);

        TempData.Remove(GetKey(keyCounter + 1));
        TempData[GetKey(keyCounter + 1)] = errors;
    }

    protected List<string> GetErrors()
    {
        int jnk;
        return GetErrors(out jnk);
    }

    private string GetKey(int i)
    {
        return string.Format("ErrorKey:{0}", i);
    }

    private List<string> GetErrors(out int keyCounter)
    {
        keyCounter = 0;
        List<string> errors = null;

        for (int ii = 0; ii < MaxErrorKeyCounter; ii++)
        {
            string tryKey = GetKey(ii);
            if (TempData.ContainsKey(tryKey))
            {
                keyCounter = ii;
                errors = (List<string>)TempData[tryKey];
            }
        }

        if (errors == null)
            errors = new List<string>();

        return errors;
    }

1 Ответ

0 голосов
/ 20 августа 2009

Почему бы просто не использовать сессию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...