Question

J'ai un problème bizarre avec EditorFor dans un de mes vues. Le code suivant renvoie une ArgumentNullException.

<%: Html.EditorFor(x => x.Name) %>

Cependant, le code suivant est très bien.

<%: Html.TextBoxFor(x => x.Name) %>

Model.Name est une variable de chaîne -. Et son ensemble

EditorFor fonctionne dans une autre vue -. Jusqu'à cette vue se bloque, à quel point je dois redémarrer le serveur Web de développement (Cassini) ou tous les appels EditorFor accident avec le même message

J'ai couru un test avec la source MVC 2, en espérant que je pourrais obtenir un aperçu, mais cela marchait bien! On peut supposer que la source RTM MVC 2 sur il devrait être celui VS2010 (dates semblent concorder).

Je viens passe à TextBoxFor, comme c'est très bien - mais je voudrais savoir quel est le problème. Je suis en cours d'exécution sous .NET 4, VS2010 et Win7 x64.

[ Mise à jour :. Même problème se produit avec DisplayFor]

trace de la pile partielle est la suivante:

[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
Était-ce utile?

La solution

Qu'est-ce que l'apparence du modèle comme éditeur pour la propriété que vous passe? (Je suppose que x.Name est une chaîne, vous devriez donc avoir un modèle appelé String.ascx dans les vues / Shared / EditorTemplates).

Il probable que le modèle de l'éditeur qui se charge de la chaîne ne fonctionne pas comme une chaîne nulle étant passée.

Si vous ne disposez pas d'un modèle éditeur personnalisé pour la chaîne (et tout ce que vous voulez est une zone de texte de base), alors il n'y a aucune raison d'utiliser EditorFor.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top