私は3種類のコンタクトフォームを持つウェブサイトを持っています。それぞれのコンタクトフォームはモデルに関連付けられています。コントローラの共有方法
- お問い合わせ
- 苦情
に参加彼らはすべての私のIContact
インターフェース(EG、Enquiry
はAbstractContact
とAbstractContact
IContact
を実装を拡張)を実装低音クラス(AbstractContact
)から継承します。
これは私のMake_A_Complaintビューで意味、私のモデルはJoin_Usビューのように、私のモデルはタイプModels.JoinのあるタイプModels.Complaint、である...
それはそれらすべてのためにいいだろう私のコントローラー内の1つの方法でルーティングします。何かのように
public ActionResult ContactUs(Models.Contact.IContact model)
私はその後、希望のタイプにキャストすることができます。
しかし、MVCでは、インターフェイスとしてまたは抽象クラスをパラメータとして使用することはできません。
その他のオプションはありますか?コントローラで複数のメソッドを作成するための私の唯一の選択肢、私はので、私は
public ActionResult Send(Models.Contact.Enquiry model)
public ActionResult Send(Models.Contact.Complaint model)
public ActionResult Send(Models.Contact.Join model)
そのことはできません:
そして、1つのモデルタイプごとのコントローラ(Activate.CreateInstace()を使用してモデルのインスタンスを初期化し、インスタンスを作成する必要があります)。ただし、リクエスト内の値を読み込んでインスタンスを初期化するカスタムModelBinderを作成することもできます(ただし、それらを区別するプロパティが必要です) –