2009-08-12 10 views
1

私は次の行にnull参照の例外を返し、私のAsp.Net MVCアプリケーション内のフォームを持っているが、唯一のポストバックエラーの後:Null参照例外と??オペレータ

<%= 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

これは素晴らしいですね???カスケードnullチェックを行う演算子。 –

+0

別のprintステートメントで各パーツの値をコンソールまたはログファイルに出力し、ヌルプリントがいつ得られるかを確認します。または、最初の2つが最初にヌルでないことを確認するためにif文を入れます。 –

答えて

1

私のミスを占めるだろうが、私は、エラー情報が、この場合にはかなり悪かったと言うでしょう、と私は、この行が強調表示された理由はわかりません...

しかし、私はEventオブジェクトを作成し、そのオブジェクトにフォームからの情報を入力します。ただし、EventオブジェクトはいくつかのオブジェクトのうちのいくつかがEntitySetであるため、これらのオブジェクトを作成する前に構築する必要があります。

これは当てはまりませんでした。コントローラーにキャッチされているモデルバインダーで例外が発生しました。例外を発生させていたオブジェクトとプロパティは、Model.Evt.Descriptionとはまったく関係がありませんでした。そのため、ビューの表示時にエラーで強調表示された理由がわかりません。

9

モデルやEVTのどちらかがNULLであるようにそれはない、実際に説明フィールド、見えます。

+0

私が間違っていない限り、残念ながらではありません。私は、EventFormModelコンストラクタの中にブレークポイントを置いています。どちらの場合も、Evtオブジェクトは値を持つプロパティを持っています.View(new EventFormViewModel(evt))の後ろを歩いたときのViewData.Modelでも。 Evtオブジェクトに値が設定されます。これが私が信じることを確認できる最後のポイントです。 – Richbits

+0

デバッグの場合は、 に変更できます。モデル== null? "nullモデル:(Model.Evt == null?" null evt ":(Model.Evt.Description == null?" null description ":Model.Evt.Description)) これは実際に何がnullであるかを示します。 – David

+0

David、ありがとう、私はSternoが何かに乗っているかもしれないと思うが、やはり作業しようとしていると思う.Html.TextAreaのModel.Evt.Descriptionを置き換えて、上記のステートメントをインクルードする。最初のロード時に "null (正確に)テキストボックスに入力すると、同じエラーが発生しました。 – Richbits

1

Evtもnullである可能性はありますか?私のカスタムモデルバインダーの中でそれは例外では

+0

ありがとうございました。 – Richbits