繁体   English   中英

剃刀模型不将项目列表返回给控制器

[英]Razor model does not return list of items to controller

我是使用剃刀进行MVC编程的新手,我需要您对我的代码有什么问题的建议。

我有一个模特

public class OrderDetails : OrderList
{
      public string CompanyId { get; set; }
      public List<OrderItems> OrdItems { get; set; }
}
public class OrderItems
{
      public int Id { get; set; }
      public string StopAddressName { get; set; }
}

我有一个填充数据的控制器。

public ActionResult Edit()
{
      OrderDetails ordDtl = new OrderDetails();

      ordDtl.CompanyId = "1";
      ordDtl.OrdItems = new List<OrderItems>();
      for (int i = 1; i < 4; i++)
      {
          OrderItems tmp = new OrderItems();
          tmp.Id = i;
          tmp.StopAddressName = "Street " + i;
          ordDtl.OrdItems.Add(tmp);
      }

      return View("EditOrder", ordDtl);
}

当我发送它查看时,它将显示所有数据。 这是我的看法。

@model OrderDetails
@using (Html.BeginForm("Edit", "Orderlayouts", FormMethod.Post))
{
   <fieldset><legend>OrderDetail</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.CompanyId)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.CompanyId)
        </div>

        <table>
          <tr>
             <td>id</td>
             <td>Address</td>
          </tr>
          @foreach (var itm in Model.OrdItems)
          {
          <tr>
             <td>@itm.Id</td>
             <td>@itm.StopAddressName</td>
          </tr>
          }
          </table> 

<p>
    <input type="submit" value="Edit" />
</p>
    </fieldset>
}

当我单击提交按钮时,我在控制器CompanyID中,但是OrdItems值变为null。 您能指出我的代码出了什么问题吗? 这是我的控制器。

[HttpPost]
public ActionResult Edit(OrderDetails Orderdt)
{
    return View("EditOrder", Orderdt);
}

任何建议将不胜感激。

我会尝试做这样的事情。

@for (int i = 0; i < Model.OrdItems.Count; i++)
{

@Html.DisplayFor(model => model.OrdItems[i].Id)@Html.HiddenFor(model => model.OrdItems[i].Id)
@Html.DisplayFor(model => model.OrdItems[i].StopAddressName)@Html.HiddenFor(model => model.OrdItems[i].StopAddressName)

}

老实说,模型绑定是我MVC工作的祸根。

但是,在这里,您将看到一个仅包含companyID的form样式帖子-视图中没有其他可用于绑定的表单字段。

我假设OrderDetails是一个实体(通过Entity Framework绑定到数据库表)。 对于具有列表类型导航属性的所有实体, 必须使用ICollection 此外,所有导航属性(无论是单个外键还是列表)都必须是虚拟的。 EF实际上并没有返回您的类,而是返回了具有导航属性的类的代理,以返回正确的对象。 如果不是虚拟的,则EF无法进行覆盖,而您会得到一个空值。 因此,您的模型应如下所示:

public class OrderDetails : OrderList
{
      public string CompanyId { get; set; }
      public virtual ICollection<OrderItems> OrdItems { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM