Следующий код дает опорную ошибку NULL, когда str является NULL, но только на нашем производственном сервере, а не на наших серверах разработки или тестирования.Исключительное исключение ссылки в методе WriteAttributeTo
<div>
<input value="@Html.Raw(str)" />
</div>
Это работает просто отлично:
<div>
<input value="@str" />
</div>
Как это делает:
<div>
Values is: @Html.Raw(str)
</div>
Так что это не вопрос @ Html.Raw не в состоянии принять параметр NULL. Я не уверен, что именно он возвращает в этом случае; но он как-то отличается на одном сервере, чем на другом.
Оба имеют ту же версию System.Web.Mvc, хотя я не знаю, что другие DLL для проверки. System.Web.WebPages, которая является сборкой, которая должна содержать сбойный метод MVC, является той же версией на обоих серверах. Это версия MVC 4; .Net 4.5.
Как такое возможно? Ошибка возникает в методе WriteAttributeTo, хотя я даже не знаю, почему это будет вызвано здесь, поскольку оно использует стандартные теги HTML, а не помощник @ Html.TextBoxFor.
Редактировать Одна вещь, которая может быть полезна, если другие пытаются поставить этот код в представлении своих собственных, чтобы увидеть, если он работает или ломается. По крайней мере, я бы знал, что это моя производственная среда или среда тестирования, которая ведет себя неожиданно.
Вот полный трассировки стека:
в System.Web.WebPages.WebPageExecutingBase.WriteAttributeTo (String pageVirtualPath, TextWriter писатель, имя String, PositionTagged
1 prefix, PositionTagged
1 суффикс, AttributeValue [] значения) в System.Web.WebPages.WebPageExecutingBase.WriteAttributeTo (TextWriter писатель, имя String, PositionTagged1 prefix, PositionTagged
1 суффикс, AttributeValue [] значения) на System.Web.WebPages.WebPageExecutingBase.WriteAttribute (имя строкового PositionTagged1 prefix, PositionTagged
1 суффикс, AttributeValue [] значения) в ASP._Page_Views_AdminSurvey_TopDown_cshtml.Execute() в C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ корень \ fdd62ffd \ 90d151d1 \ App_Web_xsolwitr. 2.cs: линия 0 в System.Web.WebPages.WebPageBase.ExecutePageHierarchy() в System.Web.Mvc.WebViewPage.ExecutePageHierarchy() в System.Web.WebPages.StartPage.ExecutePageHierarchy() в System.Web .WebPages.WebPageBase.ExecutePageHierarchy (WebPageContext PageContext, TextWriter писатель, WebPageRenderingBase StartPage) в System.Web.Mvc.ViewResultBase.ExecuteResult (ControllerContext контекст) в System.Web.Mvc.ControllerActionInvoker. <> c_ DisplayClass1a.b _17() на System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (IResultFilter фильтр, ResultExecutingContext preContext, Func1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func
1 продолжение) в System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext controlContext, IList`1, ActionResult actionResult) в System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c_ DisplayClass25.b _22 (IAsyncResult asyncResult) в System.Web.Mvc.Controller. <> c_ DisplayClass1d.b _18 (IAsyncResult asyncResult) в System.Web.Mvc.Async.AsyncResultWrapper. <> c_ DisplayClass4.b _3 (IAsyncResult ар) при System.Web.Mvc.Controller.EndExecuteCore (IAsyncResult AsyncResult) в System.Web.Mvc.Async.AsyncResultWrapper. <> c_ DisplayClass4.b _3 (IAsyncResult ar) по адресу System.Web.Mvc.MvcHandler. <> c_ DisplayClass6. <> c _DisplayClassb.b_ 4 (IAsyncResult asyncResult) в System.Web.Mvc.Async.AsyncResultWrapper. <> с _DisplayClass4.b__3 (IAsyncResult ар) при System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() на System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, Логическое & completedSynchronously)
Значение строки равно нулю? Или что-то еще? Возможно, в этой строке есть какой-то юникод, который испортился с писателем. – Fals
Это происходит только тогда, когда оно равно нулю. Протестировал его, просто используя null непосредственно вместо переменной; такой же результат. – GendoIkari
Можете ли вы воспроизвести проблему во вновь созданном приложении MVC4 (только один контроллер с одним октановым видом), развернутым на вашем рабочем сервере? Или эта проблема существует только в вашем реальном приложении? Если вы можете перепрограммировать его, вы можете загрузить свою версию где-нибудь (github/skydrive/etc)? – nemesv