Я собрал короткий Node.js отладочный праймер при использовании инспектора узла для тех, кто не уверен, с чего начать.
Здесь - проблема в codeplex , объясняющая, почему возникает эта ошибка.
Цитата из http://web.archive.org/web/20131004122626/http://aspnet.codeplex.com/workitem/1795 , так как исходная ссылка не работает:
Атрибут HandleError не должен хранить информацию об исключении в ViewData.
Когда атрибут
HandleError
обрабатывает исключение, он сохраняет информацию об исключении вViewData
. Это проблема, когдаError.aspx
наследуется отsite.master
, а классsite.master
объявляется следующим образом.public partial class Site : System.Web.Mvc.ViewMasterPage<SiteViewData> { }
SiteViewData
содержит:public class SiteViewData { public String Title { get; set; } }
Каждый класс страницы
ViewData
наследуется от классаSiteViewData
и выглядит примерно такpublic class IndexViewData : SiteViewData { public String Message { get; set; } public String SupportedLanguages {get; set;} }
Этот подход позволяет написать код на странице
Site.Master
следующим образом<title><%= Html.Encode(ViewData.Model.Title) %></title>
К сожалению, когда выдается исключение, модель заменяется экземпляром класса
HandleErrorInfo
. Это вызывает выбросInvalidOperationException
с информациейЭлемент модели, переданный в словарь, имеет тип
System.Web.Mvc.HandleErrorInfo
, но для этого словаря требуется элемент модели типаIgwt.Boh.Website.Web.Controllers.SiteViewData
.Можно ли добавить новое свойство
ErrorData
в классViewResult
для хранения экземпляра классаHandleErrorInfo
? Таким образом,ViewData
не меняется.Вполне вероятно, что любое исключение, возникшее в действии, произойдет после того, как свойства
IndexViewData
(иSiteViewData
) уже были инициализированы.Закрыто 27 января 2010 в 00:24 по
Не исправлю - см. Комментарии.
Комментарии, упомянутые с помощью «wontfix», принадлежат бывшему члену команды Microsoft вместе с предложением обойти это (выделено жирным шрифтом):
К тому времени выполняется атрибут [HandleError], мы потеряли ссылку на исходный объект ActionResult. Мы даже не знаем, намеревались ли вы показать представление в любом случае - возможно, вы намеревались перенаправить. Часть конвейера (ViewResult), которая отвечала бы за передачу модели из контроллера в представление, исчезла.
Если возникает исключение, любая модель, над которой работало приложение, в любом случае должна рассматриваться как поврежденная или недоступная. Лучше всего было бы написать свое представление об ошибке таким образом, чтобы ни для него, ни для его зависимостей (например, его главной страницы) не требовалась исходная модель.
[Тысяча сто двадцать семь]