3

我有一个模型作为其中的订单我有一个我试图在@Html.Partial 代码片段中使用的对象

 public class Order{
   public string Id{set;get;}
   public Address BillingAdress{set;get;}
   public Address ShippingAddress{set;get;}
 }

 public class Address{
   public int Id{set;get;}
   public string Address{set;get;}
 }

可见

  @model Order
  OrderId: 
  @Html.TextBoxFor(x=>Model.Id)

  ShippingAdress: 
  @Html.Partial("Adress", Model.ShippingAdress)

  BillingAddress:
  @Html.Partial("Adress", Model.BillingAdress)

这是行不通的。但是当我传递 Model 而不是 Model.ShippingAdress 和 Model.BillingAdress 时,TryUpdateModel(Order) 正在控制器操作中工作,谁能告诉我为什么?我在网上搜索过,但没有得到任何具体的解决方案,所以请帮助我?

4

1 回答 1

1

原因是 Partial 不遵守输入字段的命名约定。改用编辑器模板:

@model Order
OrderId: 
@Html.TextBoxFor(x => x.Id)

ShippingAdress: 
@Html.EditorFor(x => x.ShippingAdress)

BillingAddress:
@Html.EditorFor(x => x.BillingAdress)

现在将您Adress.cshtml移至~/Views/Shared/EditorTemplates/Address.cshtml. 模板的名称和位置很重要。它的位置~/Views/Shared/EditorTemplates和命名方式应与模型类型 ( Address.cshtml) 相同:

@model Address
...
于 2013-03-11T13:06:42.957 回答