Представьте, что у вас есть 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;
}