尝试Catch不能在MVC3中工作

时间:2011-05-12 22:57:51

标签: c# asp.net-mvc-3

try
{
    var orderedListOfRfidTags = uow.RfidTags.ToList().OrderBy(t => int.Parse(t.Number));
    return View(orderedListOfRfidTags);
}
catch
{
    var orderedListOfRfidTags = uow.RfidTags.OrderBy(t => t.Number).ToList();
    return View(orderedListOfRfidTags);
}

MVC3 - 在发布模式下,这仍然会在第一行var ordreedListOfRfidTags上失败...

我想知道为什么尝试捕获不是尝试和捕捉? enter image description here

然后按F10它会转到这里..这是我的ORM包装器的一部分...嗯我想知道这是不是问题。

protected override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            if (_unitOfWorkScope != null)
            {
                _unitOfWorkScope.Dispose();
            }

            base.OnResultExecuted(filterContext);
        }

3 个答案:

答案 0 :(得分:2)

在您尝试访问列表中的元素之前,不会调用传递给OrderBy的委托。

所以我认为错误没有被捕获,因为在动作方法返回之后,在呈现视图之前不会枚举您的集合。

答案 1 :(得分:0)

这是一个糟糕的设计;你不应该在你的catch中有任何可能引发另一个异常的代码。

如果我理解您的代码,您希望尝试将RFID解析为int,但如果失败则会重新依赖string

如果你不能保证Numbers的{​​{1}}不会是一个数字(这似乎是一个愚蠢的命名结构),那么我会把它留作字符串排序和抛弃int解析

答案 2 :(得分:0)

答案是LightSpeed失败了。一旦添加了支持(很快 - 很棒的产品!)一切都运行良好:

// trying to convert to an int.. if fail, use string
        // need up to date nightly build of LS3.1 for this to work
        // otherwise trycatch will fail due to LS crashing out.
        try
        {
            var orderedListOfRfidTags = uow.RfidTags
                                            .OrderBy(t => Convert.ToInt32(t.Number))
                                            .ToList();
            return View(orderedListOfRfidTags);
        }
        catch
        {
            var orderedListOfRfidTags = uow.RfidTags
                                            .OrderBy(t => t.Number)
                                            .ToList();
            return View(orderedListOfRfidTags);
        }