我只是试图建立一个看法,但我发现了以下错误: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