空引用异常和??操作者

时间:2009-08-12 16:20:57

标签: c# asp.net-mvc

我的Asp.Net MVC应用程序中有一个表单,它在以下行返回Null引用异常,但仅在回发错误之后:

<%= Html.TextArea("Description", Model.Evt.Description ?? "")%>

字符串描述确实为空,但我的期望是如果Model.evt.Descriptionnull,那么“{”将显示在TextArea中。为什么它在最初加载表单时工作正常呢?

唯一的区别是ViewUserControl的类型是从初始加载的新对象和回发重新加载的模型对象填充的。

我错过了什么?

Stack Trace如下:

[NullReferenceException: Object reference not set to an instance of an object.]
   System.Web.Mvc.HtmlHelper.GetModelStateValue(String key, Type destinationType) +63
   System.Web.Mvc.Html.TextAreaExtensions.TextAreaHelper(HtmlHelper htmlHelper, String name, Boolean useViewData, String value, IDictionary`2 implicitAttributes, IDictionary`2 explicitParameters, IDictionary`2 htmlAttributes) +261
   System.Web.Mvc.Html.TextAreaExtensions.TextArea(HtmlHelper htmlHelper, String name, String value, IDictionary`2 htmlAttributes) +213
   System.Web.Mvc.Html.TextAreaExtensions.TextArea(HtmlHelper htmlHelper, String name, String value) +61
   ASP.views_events_eventform_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in c:\Documents and Settings\Richard Box\My Documents\Visual Studio 2008\Projects\EventsManager\EventsManager\Views\Events\EventForm.ascx:64
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +256
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Page.Render(HtmlTextWriter writer) +29
   System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +59
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266

3 个答案:

答案 0 :(得分:9)

看起来Model或Evt是null,实际上不是Description字段。

答案 1 :(得分:1)

Evt是否也可能为空?这将解释异常

答案 2 :(得分:1)

我的错误,但我会说在这种情况下错误信息很差,我不知道为什么这条线被突出显示...

在我的自定义模型Binder中,我创建了一个Event对象并使用表单中的信息填充它,但是因为Event对象由其他几个对象组成,其中一些对象是EntitySet我需要的确保在尝试填充它们之前构建其中的每一个。

我应该注意到情况并非如此,并且在控制器中捕获的模型绑定器中引发了异常。引发异常的对象和属性与Model.Evt.Description完全无关,所以我不知道为什么在显示视图的错误中突出显示了这一点。