MVC Erreur: L'élément de modèle adopté dans le dictionnaire est null
Je suis juste en train de construire un point de vue, mais j'obtiens l'erreur suivante:
Système.InvalidOperationException: L'
l'élément de modèle adopté dans le dictionnaire
est nulle, mais ce dictionnaire exige
une valeur non nulle de l'élément de modèle de type
'Système.DateTime
Maintenant, je sais pourquoi c'est à venir, le champ particulier de la base de données est null, cependant il est censé être, que c'est quelque chose qui est modifié à une date ultérieure. Voici mon code:
Action
public ActionResult View(Int64? Id)
{
ModelContainer ctn = new ModelContainer();
var item = from t in ctn.Items where t.ItemID == Id select t;
return View(Item.First());
}
Vue Principale
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Administrator.Master" Inherits="System.Web.Mvc.ViewPage<myApp.Data.Item>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
View
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% Html.RenderPartial("Details", Model); %>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="Header" runat="server">
<h1>Details - <%= Model.MainItem %></h1>
</asp:Content>
Vue Partielle
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<myApp.Data.Item>" %>
<%@ Import Namespace="myApp.Supplier.Web.Extensions" %>
<fieldset>
<legend>Information</legend>
<div class="fieldset">
<%= Html.LabelFor(m => m.MainItem)%>
<%= Html.DisplayFor(m => m.MainItem, "FormTextShort")%><br />
<%= Html.LabelFor(m => m.Supplier.Name)%>
<%= Html.DisplayFor(m => m.Supplier.Name, "FormTextShort")%><br />
<%= Html.LabelFor(m => m.ProductCode)%>
<%= Html.DisplayFor(m => m.ProductCode, "FormTextShort")%><br />
<%= Html.LabelFor(m => m.Product.SubmissionDate)%>
<%= Html.DisplayFor(m => m.Product.SubmissionDate, "FormDateShort")%><br />
<%= Html.LabelFor(m => m.Product.SentForRepair)%>
<%= Html.DisplayFor(m => m.Product.SentForRepair, "FormDateShort")%><br />
</div>
</fieldset>
Dans ce cas, le x.Produit.SentForRepair date est à gauche null, parce qu'au moment de la soumission, il n'a pas encore été envoyé. J'ai d'autres domaines comme, par exemple, prixtotal, etc toutefois, pour des raisons de simplicité, je n'ai pas inclus ici. Si je commente la SentForRepair lignes, la Vue affiche parfaitement avec les autres informations.
Je serais très reconnaissante si quelqu'un pouvait me diriger dans la bonne direction quant à la façon de contourner cette erreur!! 🙂
OriginalL'auteur 109221793 | 2011-01-28
Vous devez vous connecter pour publier un commentaire.
À l'intérieur du modèle d'Affichage, vous devez vérifier la valeur null (après avoir fortement typé à
DateTime?
):ou si vous voulez simplement fournir un format de date personnalisé, vous pouvez supprimer le
FormDateShort
modèle d'affichage et de décorer votre modèle de vue de la propriété avec le[DisplayFormat]
attribut:et puis tout simplement:
Aussi, juste un peu plus d'informations, Le modèle est livré directement de la base de données, ce n'est pas un viewmodel, donc je serais pas sûr de la façon de mettre en œuvre les [DisplayFormat()] attribut ci-dessus.
concernant votre première question, je ne comprends pas vraiment ce que vous demandez. Quant à la seconde question, eh bien, il n'a pas d'importance où vos modèles viennent de, vous devriez toujours utiliser des modèles de vue.
faudra que des conseils sur le conseil ré. le Viewmodel. Ce que je voulais dire dans mon premier commentaire, est à la suite de la page dans ma question initiale, j'ai l'intention d'afficher une page d'Édition, où l'utilisateur peut modifier les détails. De ce point de Vue, je vais avoir pour afficher les champs vides. Dois-je attendre le même message d'erreur?
si vous cochez la valeur null dans le modèle d'affichage vous ne devriez pas avoir de problèmes.
OriginalL'auteur Darin Dimitrov
J'ai trouvé une autre solution ici. Valeur de consigne à nullable.
Telerik MVC Grille - problème avec nullable DateTime propriété
OriginalL'auteur Thant Zin
Changer votre Éditeur personnalisé de modèle pour le type datetime de type DateTime de type nullable datetime (DateTime?)
OriginalL'auteur Jboy Flaga
Juste changé FormDateShort modèle de sorte qu'il prend dans un DateTime? plutôt qu'un DateTime et les mettre dans une logique de vérifier que vous avez une valeur avant le rendu.
OriginalL'auteur Paul Hiles