2009-08-12 6 views
1

J'ai un formulaire dans mon application Asp.Net MVC qui renvoie une exception de référence null à la ligne suivante, mais seulement après des erreurs de postback:Null Reference Exception et le ?? Opérateur

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

La chaîne La description est en effet nulle, mais mon attente est que si Model.evt.Description est null alors "" sera affiché dans le TextArea. Pourquoi fait-il cela quand il fonctionne bien sur le chargement initial du formulaire? La seule différence est que le type de ViewUserControl est rempli à partir d'un nouvel objet pour le chargement initial et l'objet de modèle sur le rechargement de publication.

Qu'est-ce qui me manque?

La Trace de la pile est la suivante:

[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

Ce serait génial d'avoir un ??? opérateur qui effectue une vérification null en cascade. –

+0

Imprimez sur une console ou un fichier journal les valeurs de chaque pièce, dans une instruction d'impression distincte, et voyez quand vous obtenez une impression NULL. Ou, mettez une instruction if pour vérifier les deux premiers pour vous assurer qu'ils ne sont pas nuls en premier. –

Répondre

1

Mon erreur, mais je dirais que les informations d'erreur était assez médiocre dans ce cas, et je ne sais pas pourquoi cette ligne a été soulignée ...

Dans mon classeur modèle personnalisé Je crée un objet Event et le remplit avec les informations du formulaire, mais parce que l'objet Event est composé de plusieurs autres objets dont certains sont EntitySet s je dois m'assurer que chacun d'entre eux est construit avant d'essayer de les remplir.

J'aurais dû remarquer que ce n'était pas le cas, et qu'une exception a été soulevée dans le classeur modèle qui est coincé dans le contrôleur. L'objet et la propriété qui soulevait l'exception étaient complètement sans rapport avec le Model.Evt.Description, donc je ne sais pas pourquoi cela a été mis en évidence dans l'erreur sur l'affichage de la vue.

9

Il ressemble à l'autre modèle ou Agrès est nulle, pas réellement le champ Description.

+0

Malheureusement non, à moins que je me trompe. J'ai placé un point d'arrêt à l'intérieur du constructeur EventFormModel et dans les deux cas, l'objet Evt a des propriétés avec des valeurs. Aussi dans ViewData.Model lorsque je passe devant la vue de retour (new EventFormViewModel (evt)); ligne l'objet Evt est rempli. C'est le dernier point que je peux vérifier, je crois. – Richbits

+0

Eh bien juste pour le débogage, vous pouvez le changer en Modèle == null? "modèle null: (Model.Evt == null?" null evt ": (Model.Evt.Description == null?" null description ": Model.Evt.Description)) et qui vous dira ce qui est en fait nulle – David

+0

David, Merci, je pense que Sterno pourrait être sur quelque chose, mais en essayant toujours de passer à travers. J'ai remplacé Model.Evt.Description dans le Html.TextArea pour inclure l'instruction ci-dessus.Whwh sur le premier chargement, j'ai vu "null description "remplir la zone de texte (correctement), à la publication de la même erreur s'est produite – Richbits

1

Est-il possible que Evt soit également nul? Cela expliquerait l'exception

+0

Merci, à peu près sûr qu'il est peuplé ... voir le commentaire sur la réponse précédente. – Richbits