2012-06-08 2 views
0

Я работаю над своим проектом в MVC 3 и ищет способ, который может добавить эту функциональность ко всем моим Html.TextboxFor:
Когда пользователь вводит «foo» и передает форму, на уровне контроллера я получаю его по модели например, «фуу».Как изменить значение 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?

+0

Вы можете сделать свой вопрос более ясным? –

+0

У меня есть несколько просмотров. в каждом представлении есть текстовое поле. До MVC у меня был метод, который исправлял входной текст, а затем сохранял его в db. например, я хочу заменить все «a» на «b». просто я вызываю этот метод каждый раз, когда я использую текст входов. Теперь в MVC я ищу общий способ, который применяется ко всем Html.TextboxFor в представлениях. –

+0

метод, который вы хотите быть общим, не может быть специфичным для элемента представления (например, TextBoxFor). Но он может быть специфичным для модели или модели представления. –

ответ

1

Как я понял из вашего кода, вы ожидаете, что ваша модель будет готова (обработана), когда она будет передана вашему контроллеру action.and, для достижения этого единственный способ - использовать привязку к модели. , но этот подход ограничен конкретным типом/классом/моделью/моделью просмотра или тем, что вы называете.

вы можете создать свой собственный 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; 
     } 
    } 

, а затем вы больше всего зарегистрировать свою пользовательскую модель Binder в 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 
    //... 
    } 

удачи.

+0

был ли это полезен тогда? –

+0

да, спасибо. это работает. –

+0

рад помочь этому работать. –