Asp.net mvc 为什么我的ASP.NET MVC 2应用程序中的EditorFor引发异常?

Asp.net mvc 为什么我的ASP.NET MVC 2应用程序中的EditorFor引发异常?,asp.net-mvc,asp.net-mvc-2,editorfor,argumentnullexception,Asp.net Mvc,Asp.net Mvc 2,Editorfor,Argumentnullexception,在我的一个观点中,我对EditorFor有一个奇怪的问题。以下代码引发ArgumentNullException <%: Html.EditorFor(x => x.Name) %> 要传递的属性的编辑器模板是什么样子的?(我假设x.Name是一个字符串,所以在Views/Shared/EditorTemplates中应该有一个名为string.ascx的模板) 为字符串加载的编辑器模板可能不喜欢传递空字符串 如果您没有用于字符串的自定义编辑器模板(并且您只需要一个基本文本框

在我的一个观点中,我对EditorFor有一个奇怪的问题。以下代码引发ArgumentNullException

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

要传递的属性的编辑器模板是什么样子的?(我假设x.Name是一个字符串,所以在Views/Shared/EditorTemplates中应该有一个名为string.ascx的模板)

为字符串加载的编辑器模板可能不喜欢传递空字符串


如果您没有用于字符串的自定义编辑器模板(并且您只需要一个基本文本框),那么就没有理由使用EditorFor。

Yes,“Name”是一个字符串变量。不,我没有自定义编辑器。我想我将跳过EditorFor,但我对为什么它在某些场景中会中断很感兴趣(DisplayFor似乎也会这样)。也许它会和MVC 3一样…是的,这可能是一个热错误,它处理默认的EditorFor字符串模板。我打赌它只是在没有自定义模板的情况下在内部调用Html.TextBox。
<%: Html.TextBoxFor(x => x.Name) %>
[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