在ASP.NET MVC中跨多个跃点保留错误消息

时间:2009-08-20 17:08:00

标签: asp.net-mvc

想象一下,您有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;
    }

1 个答案:

答案 0 :(得分:0)

为什么不直接使用会话?