16

処理する必要がある独自のバインディング シナリオ用にカスタム モデル バインダーを構築する例をいくつか見つけようとしていますが、見つけた記事はすべて、MVC2 には関係のない古いバージョンの MVC に関するものでした。私は DefaultModelBinder ソース コードを参照して、何をする必要があるかについて一般的な感覚を得ようとしましたが、私のシナリオよりも完全に複雑であり、実装する必要がある特定のロジックを分離するのに問題があります。

私の目標は、チェックボックス/テキストボックスのペアのコレクションを取得することです。すべてのチェックボックスのペアに対して、チェックボックスの値と関連するテキストボックスの値のキーと値のペアを作成したいと考えています。このデータを集約した後、目的のモデル タイプの文字列プロパティに格納できるように、コレクションに対して文字列のシリアル化を行う必要があります。特定のチェックボックスを特定のテキストボックスに関連付けることができる管理可能な形式でフォームから送信されているデータは既にあります。必要な場所にあるすべての部分を取得する方法を理解するだけです。

カスタム モデル バインダーの構築を開始できる最新のチュートリアルを知っている人はいますか?

4

2 に答える 2

12

カスタムモデルバインダーに関してMVC1から多くの変更があったと思う理由はわかりません。しかし、あなたが何をしようとしているのか理解できれば、それはかなり簡単なはずです。

public class CustomModelBinder : DefaultModelBinder {
    public override object BindModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext) {

        NameValueCollection form = controllerContext.HttpContext.Request.Form;
        //get what you need from the form collection

        //creata your model
        SomeModel myModel = new SomeMode();
        myModel.Property = "value";
        //or add some model errors if you need to
        ModelStateDictionary mState = bindingContext.ModelState;
        mState.Add("Property", new ModelState { });
        mState.AddModelError("Property", "There's an error.");

        return myModel; //return your model
    }
}

そしてあなたの行動:

public ActionResult Contact([ModelBinder(typeof(CustomModelBinder))]SomeModel m){
    //...
}

それはあなたが探しているような情報でしたか?

于 2010-02-26T18:50:21.053 に答える
1

私のブログでカスタム MVC モデル バインダーの例をいくつか見てみましょう。

于 2012-02-09T08:20:01.870 に答える