0

私は MVC 3 でプロジェクトに取り組んでおり、この機能をすべての Html.TextboxFor に追加できる方法を探しています
。例えば。

一部の Unicode 文字を別の文字に置き換えるには、この機能が必要です。

ビューとコントローラーでコードを表示させてください。

意見:

@Html.TextBoxFor(model => model.Title) // user will type "foo", in TitleTexbox! 

コントローラ:

 [HttpPost]
    public virtual ActionResult Create(MyModel model)
    {
     var x = model.Title;
     //I need variable x have 'fuu' instead of 'foo', replaceing "o" by "u"
     //...
    }

Html.TextboxFor のオーバーライドを作成する必要がありますか?

4

1 に答える 1

1

私があなたのコードから理解したように、モデルがコントローラーアクションに渡されたときに準備ができている(処理されている)ことを期待しています。これを達成するための唯一の方法は、モデルバインディングを使用することです。ただし、このアプローチは、特定のタイプ/クラス/モデル/ビューモデルまたは名前を付けたものに限定されています。

次のように独自の modelBinder を作成できます。

 public class MyCustomModelBinder : DefaultModelBinder
    {
          public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
          {
              var request = controllerContext.HttpContext.Request;
              var myModel= (MyModel ) base.BindModel(controllerContext, bindingContext) ?? new MyModel ();

              myModel.Title.Replace('o','u');

              return myModel;
         }
    }

次に、カスタム モデル バインダーを Global.asax に登録します。

  ModelBinders.Binders.Add(typeof(MyModel),new MyCustomModelBinder());

次のようにアクションを変更します。

   [HttpPost]
    public virtual ActionResult Create([ModelBinder(typeof(MyCustomModelBinder))] MyModel model)
    {
     var x = model.Title;
     //here you will have the modified version of your model 
     //...
    }

幸運を。

于 2012-06-08T11:27:12.130 に答える