Asp.Net MVC3 Editor для исключения - PullRequest
1 голос
/ 10 февраля 2011

Это действительно не имеет никакого смысла для меня вообще.

У меня есть модель вида с этим полем:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
[DataType(DataType.Date)]
public DateTime Scheduled { get; set; }

Затем я отображаю это поле в представлении (это представление редактирования) следующим образом:

@Html.EditorFor(m=>m.Scheduled)

В первый раз после цикла очистки / перестройки он работает нормально, в поле отображается только дата (в последнее время я много потрудился, чтобы выяснить, как можно не отображать дату и время в коробка, и это кажется лучшим способом).

Однако, как только я обновляю страницу, я получаю следующее:

Значение не может быть нулевым. Имя параметра: поток

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.ArgumentNullException: значение не может быть нулевым. Имя параметра: поток

И эта ошибка сохраняется до следующего цикла очистки / восстановления. Трассировка стека, кажется, указывает на то, что механизм представления пытается загрузить шаблон из каталога / Shared / EditorTemplates. У меня нет шаблона для этого, поскольку в документации, по-видимому, указано, что по умолчанию оно должно быть текстовым полем, чего я и хочу.

Я не использую прямой TextBoxFor, поскольку он не выполняет форматирование, и EditorFor, кажется, делает это. И когда я пытаюсь создать шаблон для удовлетворения этого исключения, я снова пытаюсь выяснить, как форматировать дату в представлении.

Итак, я полагаю, что для ответа сработают две вещи: почему эта ошибка возникает только после первого обновления или как отформатировать дату в представлении Razor.

По запросу, полный стек:

[ArgumentNullException: значение не может быть нулевым. Имя параметра: поток] System.IO.StreamReader..ctor (Потоковый поток, Кодировка кодирования, Логическое обнаружениеEncodingFromByteOrderMarks, Int32 bufferSize) +9496369 System.Web.UI.TemplateParser.ParseFile (String PhysicalPath, VirtualPath VirtualPath) +232 System.Web.UI.TemplateParser.ParseInternal () +86 System.Web.UI.TemplateParser.Parse () +160 System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType () +110 System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider (BuildProvider buildProvider) +65 System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders () +218 System.Web.Compilation.BuildProvidersCompiler.PerformBuild () +40 System.Web.Compilation.BuildManager.CompileWebFile (VirtualPath virtualPath) +8945798 System. System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert (контекст HttpContext, VirtualPath virtualPath, логический noBuild, логический allowCrossApp, логический allowBuildInPrecompile, логический throwIfNotFound, логический гарантировать) System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath virtualPath, контекст HttpContext, логическое allowCrossApp, логическое throwIfNotFound) +125 System.Web.Compilation.BuildManager.GetCompiledType (VirtualPath virtualPath) +10 System.Web.Compilation.BuildManager.GetCompiledType (String virtualPath) +28 System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.GetCompiledType (String virtualPath) +7 System.Web.Mvc.BuildManagerCompiledView.Render (ViewContext viewContext, TextWriter Writer) +58 System.Web.Mvc.Html.TemplateHelpers.ExecuteTemplate (HtmlHelper html, ViewDataDictionary viewData, String templateName, DataBoundControlMode, GetViewNamesDelegate getViewNames, GetDefaultActionsDelegate getDefaultActions) +584System.Web.Mvc.Html.TemplateHelpers.TemplateHelper (HtmlHelper html, метаданные ModelMetadata, String htmlFieldName, String templateName, DataBoundControlMode mode, объект AdditionalViewData, ExecuteTemplateDelegate executeTemplate) +1027 System.Web.Mvc.Html.TemplateHelpers.TemplateHelper (HtmlHelper html, метаданные ModelMetadata, String htmlFieldName, String templateName, режим DataBoundControlMode, объект AdditionalViewData объекта) +66 System.Web.Mvc.Html.TemplateHelpers.TemplateFor (HtmlHelper 1 html, Expression 1 выражение, строковое templateName, строковое htmlFieldName, режим DataBoundControlMode, объект AdditionalViewData, TemplateHelperDelegate templateHelper) +118 System.Web.Mvc.Html.TemplateHelpers.TemplateFor (HtmlHelper 1 html, Expression 1 выражение, строковое templateName, строковое htmlFieldName, режим DataBoundControlMode, объект AdditionalViewData объекта) +100 System.Web.Mvc.Html.EditorExtensions.EditorFor (выражение HtmlHelper 1 html, Expression 1) +57 ASP._Page_Views_Visit_visit_Edit_cshtml.Execute () в d: \ Code ... \ Views \ Visit \ Visit \ Edit.cshtml: 34 System.Web.WebPages.WebPageBase.ExecutePageHierarchy () +207 System.Web.Mvc.WebViewPage.ExecutePageHierarchy () +81 System.Web.WebPages.WebPageBase.ExecutePageHierarchy (WebPageContext pageContext, средство записи TextWriter, WebPageRenderingBase startPage) +76 System.Web.Mvc.RazorView.RenderView (ViewContext viewContext, средство записи TextWriter, экземпляр объекта) +220 System.Web.Mvc.BuildManagerCompiledView.Render (ViewContext viewContext, TextWriter Writer) +115 System.Web.Mvc.ViewResultBase.ExecuteResult (контекст ControllerContext) +303 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (ControllerContext controllerContext, ActionResult actionResult) +13 System.Web.Mvc. <> C_ DisplayClass1c.b _19 () +23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (фильтр IResultFilter, предварительный контекст ResultExecutingContext, фильтры Func 1 continuation) +260 System.Web.Mvc.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1, actionResult actionResult) +177 System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +343 System.Web.Mvc.Controller.ExecuteCore () +116 System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) +97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute (RequestContext requestContext) +10 System.Web.Mvc. <> C_ DisplayClassb.b _5 () +37 System.Web.Mvc.Async. <> C_ DisplayClass1.b _0 () +21 System.Web.Mvc.Async. <> C_ DisplayClass8 1.<BeginSynchronous>b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult 1.End () +62 System.Web.Mvc. <> C _DisplayClasse.b_ d () +50 System.Web.Mvc.SecurityUtil.b _0 (Действие f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (Действие действия) +22 System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +60 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (результат IAsyncResult) +9 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8841105 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое и завершено синхронно) + 184

1 Ответ

0 голосов
/ 10 февраля 2011

Это имеет еще меньше смысла.В попытке предоставить дополнительную информацию, я запустил ProcMon и начал смотреть, что он пытается получить доступ к диску, если что-нибудь.Я заметил, что он пытается прочитать __MVCSITEMAPPROVIDER в папке с шаблонами, которая не существует.

Зная, что я использовал немного нестандартную версию библиотеки MvcSiteMapProvider (я обновил ее до MVC3 с помощьюруку), я решил пойти и получить последнюю версию Codeplex.Сбросил, очистил и восстановил, и он работает даже после обновлений.

Проблема решена, но я до сих пор не понимаю, почему она работала только при первой загрузке после очистки и восстановления.Согласно procmon, он все еще пытался получить доступ к __MVCSITEMAPPROVIDER при первой загрузке, но это сработало.

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