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.ShippingAdressとModel.BillingAdressの代わりにModelを渡すと、TryUpdateModel(Order)がコントローラーアクションで機能します。理由を教えてもらえますか?ネットで検索しましたが、具体的な解決策がありませんので、助けてください。

4

1 に答える 1

1

その理由は、パーシャルが入力フィールドの命名規則を尊重していないためです。代わりにエディター テンプレートを使用します。

@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 に答える