一对多视图 - 我是否必须使用视图模型?

时间:2017-08-01 09:03:39

标签: c# asp.net-mvc

说我有这样的观点:

@model Models.CustomerModel

@{
    ViewBag.Title = "Details";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Details</h2>

<div>
    @*<h4>ApplicationModel</h4>*@
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.FirstName)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.FirstName)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Surname)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Surname)
        </dd>
       </dl>
</div>

假设CustomerModel也有一组订单。 Order类看起来像这样:

public class Order {
public int OrderID {get; set; }
public datetime OrderDate {get; set; }

如何将所有喜欢的订单放在同一个视图上?我试过这个(根据上面的代码):

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.OrderID)
        </th>
    <th>
            @Html.DisplayNameFor(model => model.OrderDate)
        </th>
    </tr>

@foreach (var item in model.Orders)
{
    <tr>
        <td>
            @Html.DisplayFor(item => item.OrderID)
        </td>
    <td>
            @Html.DisplayFor(item => item.Description)
        </td>
    </tr>
}

我得到的错误是:

  

参数字典包含参数的空条目   用于方法的非可空类型'System.Int32'的'orderid'   'System.Web.Mvc.ActionResult删除(Int32)'。

如果我删除第二个代码片段(对于每个循环),那么它可以正常工作。如何添加第二个代码片段?

2 个答案:

答案 0 :(得分:0)

尝试添加空检查

@if(Model.Orders != null)
{
  foreach (var item in Model.Orders)
  {
      <tr>
          <td>
              @Html.DisplayFor(t => item.OrderID)
          </td>
      <td>
              @Html.DisplayFor(t => item.Description)
          </td>
      </tr>
  }
}

或使用LINQ,你可以

if(Model.Orders.Any())

如果它没有帮助,请查看this question

答案 1 :(得分:0)

您可以在CustomerModel

中创建OrderId Nullable
public int? OrderID {get; set; }

或者检查来自数据库的OrderId的Null值(如果OrderId不应该为Null,那么它的数据不好,应该从数据库本身开始限制)