1

ASP.NET MVC2、特にビューモデルとパーシャルを試しています。私の質問は次のとおりです。パーシャルをインターフェースに対して強く型付けし、ビューがパーシャルを使用する場合、ビューモデルにそのインターフェースを実装させることは「有効」または「正しい」ですか?

説明のために、編集ビューと作成ビューの両方で使用される製品フォームの部分 (IProductFormViewModel に対して厳密に型指定された) があるとします。これらのビューは、IProductFormViewModel を実装する ProductEditViewModel および ProductCreateViewModel に対して厳密に型指定されます。

利点は、Create と Edit の対応する POST アクションがそれぞれ ProductCreateViewModel と ProductEditViewModel オブジェクトを取ることです。


編集: パーシャルに専用のビューモデル (ProductFormViewModel) があり、ProductEditViewModel と ProductCreateViewModel のそれぞれが、パーシャルに渡される ProductFormViewModel タイプのプロパティを公開する場合、フォームが送信されると、ProductEditViewModel と ProductCreateViewModel のモデル バインディングは機能しません。 Edit アクションと Create アクションはそれぞれのオブジェクト タイプを想定しているため、これがアプローチの理由です。

4

4 に答える 4

0

はい、これは有効なアプローチのようです。

于 2011-03-23T09:42:01.387 に答える
0

インターフェイスは基本的に、クラスを実装することによって満たされる必要があるコントラクトです。しかし、ビューエンジンの場合、ビューモデルにインターフェイスを実装させることの特定の利点は見られません。これは、最後にコントローラーでビューモデルをインスタンス化してビューに渡す必要があり、ProductFormViewModel または EditProductViewModel の実装を変更すると仮定するためです。コントローラーでオブジェクトをインスタンス化 (移入) し、それをビューに渡す必要があります。そのため、依存性注入と組み合わせてリポジトリ パターンで行うのと同じ目的は達成されません。このアプローチで何を達成しようとしているのかを正確に伝えることができれば、私たちが役立つかもしれません.

于 2011-03-23T09:45:20.893 に答える
0

あなたのアプローチは問題ありません。

または、パーシャルに固有のモデルを作成し、代わりにコンポジションを使用することもできます。たとえば、次のようになります。

public class AddressModel
{
    public string Address { get; set; }
    public string Code { get; set; }
}

public class PersonModel
{
    public string Name { get; set; }
    public AddressModel Address { get; set; }
}

次に、パーシャルを再レンダリングするときに、正しいモデルを渡します。

HTH

于 2011-03-23T09:58:39.080 に答える
0

異なるパーシャルのインターフェイスが同じプロパティ名 (name など) を公開する場合、問題が発生する可能性があります。次に、インターフェイスを明示的に実装する必要があります。これにより、モデル バインディングで問題が発生します。

それ以外の場合は動作するはずです。

于 2011-03-24T12:36:06.403 に答える