0

私の見解の1つで、EditorForに奇妙な問題があります。次のコードは、ArgumentNullExceptionをスローします。

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

ただし、次のコードは問題ありません。

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

Model.Nameは文字列変数であり、設定されています。

EditorForは別のビューで動作します。このビューがクラッシュするまで、開発Webサーバー(Cassini)を再起動する必要があります。そうしないと、すべてのEditorFor呼び出しが同じメッセージでクラッシュします。

洞察が得られることを期待して、MVC 2ソースを使用してテストを実行しましたが、問題なく機能しました。おそらく、そこにあるMVC 2 RTMソースはVS2010のものであるはずです(日付は結びついているようです)。

TextBoxForに切り替えたところですが、問題は何ですか。.NET 4、VS2010、およびWin7x64で実行しています。

[更新:同じ問題がDisplayForで発生します。]

部分的なスタックトレースは次のとおりです。

[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
4

1 に答える 1

2

渡すプロパティのエディターテンプレートはどのように見えますか?(x.Nameは文字列であると想定しているため、Views / Shared / EditorTemplatesにString.ascxというテンプレートが必要です)。

文字列用にロードされているエディタテンプレートは、null文字列が渡されることを好まない可能性があります。

文字列用のカスタムエディタテンプレートがない場合(そして必要なのは基本的なテキストボックスだけです)、EditorForを使用する理由はありません。

于 2010-10-31T15:36:53.757 に答える