MVC错误:传递到字典中的模型项为空

109*_*793 11 c# asp.net-mvc model view

我只是想构建一个视图,但我收到以下错误:

System.InvalidOperationException:传递给字典的模型项为null,但此字典需要类型为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());
    }
Run Code Online (Sandbox Code Playgroud)

主视图

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

局部视图

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,x.Product.SentForRepair日期保留为null,因为在提交时,它尚未被发送出去.我有这样的其他领域,例如totalCost等,但为了简单起见,我没有将它们包含在这里.如果我注释掉SentForRepair行,则视图将与其他信息完美显示.

如果有人能指出我正确的方向来解决这个错误,我会非常感激!:)

Dar*_*rov 14

在Display模板中,您需要检查null(在强类型化之后DateTime?):

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

或者,如果您只想提供自定义日期格式,则可以删除FormDateShort显示模板并使用以下[DisplayFormat]属性修饰视图模型属性:

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

然后简单地说:

<%= Html.DisplayFor(m => m.Product.SentForRepair)%>
Run Code Online (Sandbox Code Playgroud)


Tha*_*Zin 11

我在这里找到了另一个解 设置值可以为空.

Telerik MVC Grid - 可以为空的DateTime属性的问题

@model System.DateTime?

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, 
    new { data_datepicker = true });
Run Code Online (Sandbox Code Playgroud)


Jbo*_*aga 6

将日期时间的自定义编辑器模板从DateTime类型更改为nullable datetime类型(DateTime?)

@model System.DateTime?

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
                      new { @class = "text-box single-line", data_datepicker="true"})
Run Code Online (Sandbox Code Playgroud)