4

これに似たクラスがある場合:

public class Person
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public Pet myPet { get; set; }
}

カスタムモデルバインダーを作成すると、フォームからの投稿はペットで送信されません。次のようなデータが送信されます。firstName: "myFirstName" lastName: "myLastName" myPet: "myPetsName"

実際のPetオブジェクトではなく、Petの名前が渡されるため、Petオブジェクトはモデルバインダー内から取得する必要があります。

私の質問は、モデルバインダーがサービスレイヤー、リポジトリレイヤーと相互作用する必要があるのか​​、それともペットを取得する必要があるのか​​ということです。サービスレイヤーの問題は、サービスの初期化時にModelStateにアクセスできないように見えることです:((this.ModelState)でエラーが発生します)

_petService = new PetService(new ModelStateWrapper(this.ModelState));

Personオブジェクトを作成するためにモデルバインダーが必要な場合は、ペットを何らかの方法で割り当てる必要があります...これをどのように行うのですか?

4

1 に答える 1

2

私がしているのは、ビジネス オブジェクトにバインドする代わりに、ビュー/プレゼンテーション モデルを使用することです。ユーザーが無効な値を入力する可能性があることを忘れないでください。間違いを修正するようユーザーに促すときに、これらの無効な値をユーザーに再表示する必要があります。しかし、「実際の」ビジネス オブジェクトは無効な値を受け入れないでしょう。したがって、ビュー モデルは、ビジネス オブジェクトが受け付けない入力であっても、あらゆるユーザー入力を許可する必要があります。

これにより、バインディングが容易になります。(有効な) ユーザー入力でビジネス オブジェクトを更新する場合にのみ、バインドするためにリポジトリをヒットする必要はありません。

于 2009-07-13T15:44:07.560 に答える