想象一下,您有n个页面,每个页面大致共享相同类型的模型,但该模型必须处于特定状态才能访问某些页面。
因此,如果用户键入URL以将其带到页面m,但此页面无法访问此页面,则控制器会向TempData中的错误集合添加错误消息,然后重定向到页面m-1。 / p>
问题是当页面m-1也无法访问时。如果我们在TempData中向同一个集合(使用相同的密钥)添加消息,我们在第m-2页上看不到它,因为它在页面m-2的请求开始之前从TempData中删除。
我可以想象一个解决方案,我们有多个错误密钥,每次我们想要添加错误或收到错误我们依次尝试每个密钥,但是有没有人有更好的想法? (我知道理论上我可以找出正确的页面直接重定向,但这需要很多返工,我没有太多时间!)
修改
这就是我在考虑的事情:
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;
}
答案 0 :(得分:0)
为什么不直接使用会话?