J'ai un problème étrange avec EditorFor dans une de mes vues. Le code suivant lève une ArgumentNullException.Pourquoi EditorFor dans mon application ASP.NET MVC 2 lançant ArgumentNullException?
<%: Html.EditorFor(x => x.Name) %>
Cependant, le code suivant est correct.
<%: Html.TextBoxFor(x => x.Name) %>
Model.Name est une variable de chaîne - et elle est définie. EditorFor fonctionne dans une autre vue - jusqu'à ce que cette vue se bloque, à quel point puis je dois redémarrer le serveur Web de développement (Cassini) ou tous les appels EditorFor plantent avec le même message.
J'ai effectué un test avec la source MVC 2, espérant que je pourrais avoir un aperçu, mais cela a fonctionné OK! On peut supposer que la source MVC 2 RTM là-bas devrait être celle de VS2010 (les dates semblent correspondre).
Je viens de passer à TextBoxFor, comme c'est bien - mais j'aimerais savoir quel est le problème. Je cours sous .NET 4, VS2010 et Win7 x64.
[Mise à jour . Même problème se produit avec DisplayFor]
trace de la pile partielle est:
[ArgumentNullException: Value cannot be null.
Parameter name: stream]
System.IO.StreamReader..ctor(Stream stream, Encoding encoding, 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.Compilation.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 context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) +111
System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) +125
System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) +52
System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(String virtualPath, Type requiredBaseType) +28
System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.CreateInstanceFromVirtualPath(String virtualPath, Type requiredBaseType) +36
System.Web.Mvc.WebFormView.Render(ViewContext viewContext, TextWriter writer) +172
System.Web.Mvc.Html.TemplateHelpers.ExecuteTemplate(HtmlHelper html, ViewDataDictionary viewData, String templateName, DataBoundControlMode mode, GetViewNamesDelegate getViewNames) +1154
System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData, ExecuteTemplateDelegate executeTemplate) +1626
System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData) +86
System.Web.Mvc.Html.TemplateHelpers.TemplateFor(HtmlHelper`1 html, Expression`1 expression, String templateName, String htmlFieldName, DataBoundControlMode mode, Object additionalViewData, TemplateHelperDelegate templateHelper) +210
System.Web.Mvc.Html.TemplateHelpers.TemplateFor(HtmlHelper`1 html, Expression`1 expression, String templateName, String htmlFieldName, DataBoundControlMode mode, Object additionalViewData) +129
System.Web.Mvc.Html.EditorExtensions.EditorFor(HtmlHelper`1 html, Expression`1 expression) +87
Oui, "Nom" est une variable chaîne. Et non, je n'ai pas d'éditeur personnalisé. Je suppose que je vais juste sauter EditorFor, mais je me suis intéressé à la raison pour laquelle il casse dans certains scénarios (et DisplayFor semble aussi faire). Peut-être que ça ira bien avec MVC 3 ... – dommer
Ouais, c'est probablement un bug dans hot il gère le modèle de chaîne par défaut EditorFor. Je parie qu'il appelle simplement Html.TextBox en interne lorsqu'il n'y a pas de modèle personnalisé. – automagic