Asp.net MVC исключение не перехватывается в блоке try catch - PullRequest
0 голосов
/ 21 января 2010

Может ли кто-нибудь сказать мне, почему проблема в модели существительного не будет обнаружена этим try catch?

Я пробовал это сейчас на двух разных методах контроллера, и оба раза, даже если linq2sql не позволяет сохранять данные, код никогда не переходит в блок catch.

Я наблюдал за существительным объектом в середине трассы, и свойство isvalid имеет значение false, но состояние модели isvalid равно true. В любом случае код никогда не переходит в блок catch.

Я вырываю свои волосы из-за этого. Я чувствую, что это будет что-то действительно глупое.

Код все работает аналогично ужину для ботаников.

NounRepository nounRepository = new NounRepository();
        Noun noun = new Noun();
        try
        {                
            UpdateModel(noun);
            nounRepository.Add(noun);
            nounRepository.save();
        }
        catch (Exception ex)
        {
            ModelState.AddRuleViolations(noun.GetRuleViolations());
            return View(noun);
        }
    return View(noun);

Обновление

Я только что добавил этот код, и теперь правила возвращаются к внешнему интерфейсу в порядке, так что просто кажется, что попытка перехвата не срабатывает!

UpdateModel(noun);

            if (!noun.IsValid)
            {

                var errors = noun.GetRuleViolations();
                ModelState.AddRuleViolations(noun.GetRuleViolations());
                return View(noun);

            }

            nounRepository.Add(noun);
            nounRepository.save();

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

Ответы [ 3 ]

1 голос
/ 21 января 2010

Вы столкнулись с логическим изменением в mvc - валидация здесь не выдает исключений. На самом деле, вам нужно проверить это с помощью оператора if.

Я сомневаюсь, что происходит исключение - вам все равно нужно перехватить исключение linq2sql, код правильный. Также существует высокая вероятность того, что внутри «сохранить» или «добавить» у вас есть другой улов - это довольно распространенная ошибка

1 голос
/ 21 января 2010

Правило программирования № 1: catch не сломано (AKA: SELECT не сломано).

Если вы действительно сомневаетесь, откройте меню «Отладка», выберите «Исключения», а затем установите флажок «Общепринятые языковые исключения во время выполнения» в разделе «Брошенные». Это приведет к сбою отладчика для всех исключений первого шанса. Если отладчик не ломается во время вашего обновления, то исключение никогда не будет выброшено.

Не забудьте снять галочку, когда закончите, поскольку при нормальном использовании поведение становится довольно раздражающим.

P.S. Никогда не поймать System.Exception. Поймать особые типы исключений, которые, как вы знаете, могут быть выброшены.

0 голосов
/ 21 января 2010

Ты что-то делаешь в другой теме? Это часто является причиной исключения исключений.

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