1

私の視点からajax呼び出しを行うときは、モデルのバインドを維持したいと思います。私はjqueryajaxを使用し呼び出しを行っていますが、例として、これはajaxから呼び出したいコントローラーメソッドです。

public ActionResult Create(Person personToCreate) {
    //Create person here
}

ご覧のとおり、このメソッドはモデルバインディングに依存しています。これにより、メソッドが非常にクリーンになります...ただし、これは、ajaxが呼び出しを行うときに、DBでnull許容でないすべての変数を提供する必要があることを意味します。

Personしたがって、変数を持つというテーブルがある場合、次のようになります。

firstName varchar(25) not-null
lastName  varchar(25) not-null
myPet     int         not-null <-- This is a foreign key

Personその場合、作成されるEntityFrameworkクラスは次のようになります。

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

(DBで指定されているように)どの変数もnullにできないため、これはajax呼び出しで、、、を指定する必要があることを意味string firstNamestring lastNameますPet myPet。しかし、javascriptはペットを供給することができません...

したがって、私には2つのオプションしかありません(私が知っていること):

  1. DBでmyPetをnullにできるようにする

  2. ペットオブジェクトを必要としないPersonを表す「よりフラットな」クラスを作成します。

すなわち:

public class SimplePerson {
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string myPetName { get; set; }
}

最初のオプションの問題は、DBを変更しなければならないのは奇妙に思えるということです...それは、あるべきではないことを許可しているので、間違いなくそれについて何か間違っています...

2番目のオプションの問題は、クラスがたくさんあり、これを回避するために、それぞれに重複するクラスを作成することは広範囲に及ぶように思われることです... 30のクラスがある場合、それは30の重複するクラスになります。モデルのバインドを可能にするために作成します。

誰かがより良いオプションを考えたり、あるオプションが他のオプションよりも優れている理由を説明したりできますか?

4

1 に答える 1

2

ここでの本当の秘訣は、ビューモデルクラスを実際のモデルクラスから分離することです。ビューモデルクラスは少し単純になる傾向があり、実際の作業を行う前に、実際のモデルクラスにマップし直す必要があります。AutoMapperのようなツールは、これを非常に簡単にします。

于 2009-07-16T16:56:19.767 に答える