2011-02-10 5 views
1

Cela n'a vraiment aucun sens pour moi.Asp.Net MVC3 EditorPour Exception

J'ai un modèle de vue avec ce domaine en elle:

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

J'afficher ce champ dans la vue (ce qui est une vue de modifier) ​​comme ceci:

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

La première fois après un cycle de nettoyage/reconstruction, ça fonctionne bien, il affiche juste la date dans la boîte (j'ai fait beaucoup de bidouillages dernièrement pour trouver un bon moyen de ne pas afficher la date et l'heure dans la boîte, et cela semble la meilleure façon).

Cependant, une fois que j'actualisez la page, je reçois les suivantes:

valeur ne peut pas être nulle. Nom du paramètre: flux

Description: Une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.ArgumentNullException: La valeur ne peut pas être nulle. Nom du paramètre: flux

Et cette erreur persiste jusqu'à un autre cycle de nettoyage/reconstruction. La trace de la pile semble indiquer que le moteur de vue tente de charger le modèle à partir du répertoire/Shared/EditorTemplates. Je n'ai aucun modèle pour ceci, puisque la documentation semble indiquer qu'il devrait par défaut à une zone de texte, qui est ce que je veux.

Je n'utilise pas un TextBoxFor droit car il ne fait pas le formatage, et EditorFor semble le faire. Et quand j'essaye de faire un modèle pour satisfaire cette exception, je reviens au problème d'essayer de comprendre comment formater la date dans la vue. Donc, je suppose que deux choses vont fonctionner pour une réponse: Pourquoi cette erreur se produit seulement après la première actualisation, ou comment formater une date dans une vue rasoir.

par demande, la pile complète:

[ArgumentNullException: La valeur ne peut être nulle. Nom du paramètre: flux] System.IO.StreamReader..ctor (courant de flux, le codage de codage, Boolean detectEncodingFromByteOrderMarks, 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.Com pilation.BuildManager.CompileWebFile (VirtualPath virtualPath) 8945798 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal (VirtualPath virtualPath, Boolean NOBUILD, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) 320 System.Web.Compilation.BuildManager .GetVPathBuildResultWithNoAssert (HttpContext contexte, VirtualPath virtualPath, Boolean NOBUILD, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) 111 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath virtualPath, HttpContext contexte, Boolean allowCrossApp, Boolean 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, rédacteur TextWriter) +58 System.Web.Mvc.Html.TemplateHelpers.ExecuteTemplate (HtmlHelper html, ViewDataD ictionary Viewdata, String templateName, le mode DataBoundControlMode, GetViewNamesDelegate getViewNames, GetDefaultActionsDelegate getDefaultActions) 584 System.Web.Mvc.Html.TemplateHelpers.TemplateHelper (HtmlHelper html, les métadonnées ModelMetadata, String htmlFieldName, String templateName, le mode DataBoundControlMode, objet additionalViewData, ExecuteTemplateDelegate executeTemplate) +1027 System.Web.Mvc.Html.TemplateHelpers.TemplateHelper (htmlHelper html, métadonnées ModelMetadata, chaîne htmlFieldName, chaîne templateName, mode DataBoundControlMode, objet additionalViewData) +66 System.Web.Mvc.Html.TemplateHelpers.TemplateFor (HtmlHelper 1 html, Expression 1 expression, String templateName, String htmlFieldName, Mode DataBoundControlMode, Objet additionalViewData, TemplateHelperDelegate templateHelper) +118 System.Web.Mvc.Html.TemplateHelpers.Templ ateFor (HtmlHelper 1 html, Expression une expression, String templateName, String htmlFieldName, le mode DataBoundControlMode, objet additionalViewData) 100 System.Web.Mvc.Html.EditorExtensions.EditorFor (HtmlHelper 1 html, Expression une expression) 57 ASP._Page_Views_Visit_visit_Edit_cshtml.Execute() dans d: \ Code ... \ Views \ Visit \ Visit \ Edit.cshtml: 34 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +207 System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +81 Système. Web.WebPages.WebPageBase.ExecutePageHierarchy (page WebPageContext, writer TextWriter, page WebPageRenderingBase startPage) +76 System.Web.Mvc.RazorView.RenderView (ViewContext viewContext, TextWriter writer, instance d'objet) +220 System.Web.Mvc.BuildManagerCompiledView. Rendu (V iewContext viewcontext, écrivain TextWriter) +115 System.Web.Mvc.ViewResultBase.ExecuteResult (contexte ControllerContext) +303 de System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (ControllerContext ControllerContext, ActionResult ActionResult) +13 System.Web.Mvc. <> c_ DisplayClass1c.b _19() 23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (filtre IResultFilter, ResultExecutingContext preContext, filtres 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 (Action f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust (action d'action) +22 System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest +60 (résultat IAsyncResult) +9 du système. Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 8841105 System.Web.HttpApplication.ExecuteStep (étape IExecutionStep, Boolean & completedSynchronously) +184

+1

Quelle est la trace de la pile? – SLaks

Répondre

0

Cela rend encore moins de sens. Pour essayer de fournir plus de détails, j'ai lancé ProcMon, et j'ai commencé à regarder ce qu'il essayait d'accéder au disque, le cas échéant. J'ai remarqué qu'il essayait de lire un __MVCSITEMAPPROVIDER sous le dossier de modèles, qui n'existait pas. Sachant que j'utilisais une version légèrement, erm, non standard de la bibliothèque MvcSiteMapProvider (je l'ai mise à jour manuellement à MVC3), j'ai décidé d'aller chercher la dernière version du codeplex. Dropped dedans, propre & reconstruit, et cela fonctionne même après les actualisations.

Le problème est résolu, mais je ne sais toujours pas pourquoi il ne fonctionnait que sur la première charge après une reconstruction & propre. Selon Procmon, il essayait toujours d'accéder à __MVCSITEMAPPROVIDER sur la première charge, mais cela a fonctionné.