Search code examples
asp.net-mvcasp.net-mvc-3razorhtml.textboxfor

How can edit the value of Html.TextBoxFor in controller before use it?


I'm working on my project in MVC 3 and searching for a way, which can add this functionality to all my Html.TextboxFor:
When user type "foo" and submit form, in controller level I get it by model as "fuu" for example.

I need this feature to replace some Unicode characters by some others.

Let I show my code in View and Controller:

View:

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

Controller:

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

Should I write an override for Html.TextboxFor?


Solution

  • as i understood from your code , you expect from your model to be ready(processed) when it passed to your controller action.and for accomplishing this the only way is using model-binding. but this approach is limited to particular type/class/model/viewmodel or whatever you name it.

    you can create your own modelBinder as:

     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;
             }
        }
    

    and then you most register your Custom Model Binder in Global.asax

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

    make change in your action like this:

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

    good luck.