我只是試圖建立一個看法,但我發現了以下錯誤: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
現在,我知道這是爲什麼來了,數據庫中的特定字段是 null,但它應該是,因爲這是在以後編輯的東西。這裏是我的代碼:
行動
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>
管窺
<%@ 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>
在這情況下,x.Product.SentForRepair日期保留爲空,因爲在提交時它還沒有被髮送。我還有其他類似的領域,例如總成本等,但爲了簡單起見,我沒有把它們包括在這裏。如果我將SentForRepair行註釋掉,視圖將與其他信息完美地一起顯示。
如果有人能指出我正確的方向來解決這個錯誤,我會非常感激! :)
嗨達林,謝謝快速的問題,按照這個觀點,我打算讓用戶點擊一個編輯按鈕,讓他/她看到他可以輸入缺失的數據。當我試圖顯示EditorFor文本框時,您認爲我在該視圖中會遇到同樣的問題嗎? – 109221793 2011-01-28 11:26:01