2011-01-28 14 views
10

मैं सिर्फ एक दृश्य का निर्माण करने की कोशिश कर रहा हूँ, लेकिन मैं निम्नलिखित त्रुटि हो रही है है: यह क्यों आ रहा हैMVC त्रुटि: मॉडल आइटम शब्दकोश में पारित कर दिया अशक्त

System.InvalidOperationException: The model item passed into the dictionary is null, but this dictionary requires a non-null model item of type 'System.DateTime

अब, मुझे पता है, डेटाबेस में विशेष फ़ील्ड शून्य है, हालांकि यह माना जाता है, क्योंकि यह कुछ ऐसा है जिसे बाद की तारीख में संपादित किया गया है।

कार्रवाई आंशिक देखें

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

इस में

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()); 
    } 

मुख्य देखें

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

: यहाँ मेरी कोड है मामला, x.Product.SentForRepair दिनांक शून्य छोड़ दिया गया है, क्योंकि जमा करने के समय, इसे अभी तक नहीं भेजा गया है। मेरे पास इस तरह के अन्य क्षेत्र हैं, उदा। कुलकोस्ट, आदि हालांकि सादगी के लिए मैंने उन्हें यहां शामिल नहीं किया है। अगर मैं SentForRepair लाइनों पर टिप्पणी करता हूं, तो दृश्य अन्य जानकारी के साथ पूरी तरह से प्रदर्शित होता है।

यदि कोई मुझे सही दिशा में इंगित कर सकता है तो मुझे इतनी आभारी होगी कि इस त्रुटि को कैसे प्राप्त किया जाए !! :)

उत्तर

14
प्रदर्शन टेम्पलेट आप अशक्त के लिए जांच करने की आवश्यकता (जिससे यह दृढ़ता से DateTime? के लिए लिखा था के बाद) के अंदर

:

<% if (Model.HasValue) { %> 
    <%= Html.Encode(Model.Value.ToString("yyyy-MM-dd")) %> 
<% } %> 

या अगर आप बस एक कस्टम दिनांक स्वरूप प्रदान करने के लिए करना चाहता था आप FormDateShort प्रदर्शन को दूर कर सकता है टेम्पलेट और [DisplayFormat] विशेषता के साथ अपने दृश्य मॉडल संपत्ति को सजाने:

[DisplayFormat(NullDisplayText = "", DataFormatString = "{0:yyyy-MM-dd}")] 
public DateTime? SentForRepair { get; set; } 

और फिर बस:

<%= Html.DisplayFor(m => m.Product.SentForRepair)%> 
+0

हाय डैरिन, धन्यवाद त्वरित प्रश्न, इस विचार के बाद, मैं उपयोगकर्ता को एक संपादन बटन पर क्लिक करने की अनुमति देना चाहता हूं जो उसे उस दृश्य में लाए जहां वह लापता डेटा में प्रवेश कर सकता है। क्या आपको लगता है कि जब मैं संपादक को टेक्स्टबॉक्स प्रदर्शित करने की कोशिश कर रहा हूं तो मुझे उस दृश्य में एक ही समस्या होगी? – 109221793

+0

इसके अलावा, बस थोड़ा और जानकारी, मॉडल सीधे डेटाबेस से आता है, यह एक व्यूमोडेल नहीं है, इसलिए मैं उपरोक्त [DisplayFormat()] विशेषता को कार्यान्वित करने के बारे में अनिश्चित हूं। – 109221793

+0

@ 109221793, आपके पहले प्रश्न से संबंधित मैं वास्तव में समझ नहीं पा रहा हूं कि आप क्या पूछ रहे हैं।जहां तक ​​दूसरे प्रश्न का सवाल है, ठीक है, इससे कोई फ़र्क नहीं पड़ता कि आपके मॉडल कहां से आते हैं, आपको हमेशा दृश्य मॉडल का उपयोग करना चाहिए। –

1

बस अपना फॉर्मडेट शेयर टेम्पलेट बदल दिया है, इसलिए यह डेटटाइम में आता है? डेटटाइम की बजाय और कुछ तर्क में डालकर यह जांचने के लिए कि आपके पास प्रतिपादन से पहले कोई मान है।

10

मुझे यहां एक और समाधान मिला। मूल्य को शून्य करने के लिए सेट करें।

Telerik MVC Grid - problem with nullable DateTime property

@model System.DateTime? 

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, 
    new { data_datepicker = true }); 
6

बदलें प्रकार DATETIME से दिनांक के लिए अपने कस्टम संपादक टेम्पलेट एक और अच्छा जबाब :) बस एक के लिए एक बार फिर टाइप करने के लिए नल datetime (DATETIME?)

@model System.DateTime? 

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, 
         new { @class = "text-box single-line", data_datepicker="true"}) 
संबंधित मुद्दे