1

私のアプリはクライアント側で JavascriptMVC を使用しており、ASP MVC は基本的に REST サービスとしてのみ機能しています。典型的なコントローラーメソッドは次のとおりです。

public JsonResult Update(CustomerDto dto)
{
  var repository = Factory.NewCustomerRepository())
  // ... Convert DTO back to entity and save changes
  return Json(dto);
}

問題は、CustomerDTO に、フォーム データから本来あるべきオブジェクトに変換されていないプロパティが含まれていることです。たとえば、電話番号:

public class CustomerDto
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public PhoneNumberDto[] PhoneNumbers { get; set; }
    // ... more properties
}
public class PhoneNumberDTO
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
    public string Label { get; set; }
    public string Number { get; set; }
}

コントローラー アクションでは、PhoneNumbers は配列内に正しい数の要素を持ちますが、各オブジェクトには null/既定値しかありません。リクエストが適切なフォーム データをすべて送信していることを確認しました。

Id          26
FirstName   A
LastName    Person
MiddleName  Test
PhoneNumbers[0][CustomerID  26
PhoneNumbers[0][Id] 5
PhoneNumbers[0][Label]  Mobile
PhoneNumbers[0][Number] (555)555-5555
PhoneNumbers[1][CustomerID  26
PhoneNumbers[1][Id] 8
PhoneNumbers[1][Label]  Home
PhoneNumbers[1][Number] (654)654-6546

何が起こっているのかについてのアイデアはありますか? MVC3 がネストされたオブジェクトをフォーム値から自動的にマップできると考えるのは間違っていますか? 助けてくれてありがとう!

4

1 に答える 1

1

実際、デフォルトのモデル バインダーでこれらの値を正常にバインドする場合、リクエストは次のようになります (PhoneNumbers[0].CustomerIDの代わりに注意してPhoneNumbers[0][CustomerID]ください)。

Id                          26
FirstName                   A
LastName                    Person
MiddleName                  Test
PhoneNumbers[0].CustomerID  26
PhoneNumbers[0].Id          5
PhoneNumbers[0].Label       Mobile
PhoneNumbers[0].Number      (555)555-5555
PhoneNumbers[1].CustomerID  26
PhoneNumbers[1].Id          8
PhoneNumbers[1].Label       Home
PhoneNumbers[1].Number      (654)654-6546

コレクションに使用されるワイヤ形式については、次のブログ投稿をご覧ください。

代わりに、 JSON requestsを使用できます。

于 2011-05-11T15:49:34.187 に答える