2009-08-12 30 views
1

我有我的Asp.Net MVC應用程序中的一種形式,在返回下面的行一個空引用異常,但只有在回傳失誤:空引用異常和??操作

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

字符串描述確實是空的,但我的期望是,如果Model.evt.Descriptionnull那麼「」將顯示在TextArea中。爲什麼它在最初加載表單時工作正常?

唯一的區別是ViewUserControl的類型是從初始加載的新對象和回發加載時的模型對象填充的。

我錯過了什麼?

堆棧跟蹤如下:

[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 
+2

這將是偉大的有一個?運算符執行級聯空檢查。 – 2009-08-12 16:27:30

+0

在單獨的打印語句中打印出控制檯或日誌文件中每個部分的值,並查看何時獲得打印空值。或者,在if語句中檢查前兩個以確定它們不是空的。 – 2009-08-12 16:28:42

回答

1

我的錯誤,但我要說的是,該錯誤信息是在這種情況下非常不好,我不知道爲什麼這條線被強調......

在我的自定義模型綁定我創建了一個Event對象並使用表單中的信息填充它,但是因爲Event對象由幾個其他對象組成,其中一些對象是EntitySet,所以我需要確保在嘗試填充它們之前構造每個對象。

我應該注意到情況並非如此,並且在控制器中捕捉到的模型活頁夾中出現了異常。引發異常的對象和屬性與Model.Evt.Description完全無關,所以我不知道爲什麼在顯示視圖時出現錯誤時突出顯示。

9

它看起來像任何型號或EVT爲空,實際上不是說明字段。

+0

不幸的是,除非我錯了。我已經在EventFormModel構造函數中放置了一個斷點,並且在這兩種情況下,Evt對象都具有值爲的屬性。另外在ViewData.Model中,當我跨過返回View(新的EventFormViewModel(evt))時; Evt對象的行被填充。這是我可以檢查我相信的最後一點。 – Richbits 2009-08-12 16:37:42

+0

那麼只是爲了調試,你可以改變它爲 Model == null? 「null model:(Model.Evt == null?」null evt「:(Model.Evt.Description == null?」null description「:Model.Evt.Description)) 並且會告訴你什麼是空的 – David 2009-08-12 17:22:41

+0

David,謝謝,我認爲Sterno可能會做某些事情,但仍然試圖通過。我替換了Html.TextArea中的Model.Evt.Description以包含上述語句。在第一次加載時,我確實看到「null描述「填充文本框(正確),在回發後發生同樣的失敗。 – Richbits 2009-08-13 10:48:42

1

Evt也可能爲null嗎?這將佔到例外

+0

非常確定它已填充...請參閱上一個答案的評論。 – Richbits 2009-08-12 16:38:31