0

我正在 MVC 3 中处理我的项目并寻找一种方法,可以将此功能添加到我的所有 Html.TextboxFor:
当用户键入“foo”并提交表单时,在控制器级别我通过模型将它作为“fuu”例如。

我需要这个功能来用其他一些字符替换一些 Unicode 字符。

让我在 View 和 Controller 中显示我的代码:

看法:

@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 回答