Asp.net mvc 在使用之前,如何在控制器中编辑Html.TextBoxFor的值?
我正在MVC 3中进行我的项目,并正在寻找一种方法,可以将此功能添加到我的所有Html中 当用户输入“foo”并提交表单时,在控制器级别,我通过模型得到它,例如“fuu” 我需要此功能以将某些Unicode字符替换为其他字符 让我在视图和控制器中显示我的代码:Asp.net mvc 在使用之前,如何在控制器中编辑Html.TextBoxFor的值?,asp.net-mvc,asp.net-mvc-3,razor,html.textboxfor,Asp.net Mvc,Asp.net Mvc 3,Razor,Html.textboxfor,我正在MVC 3中进行我的项目,并正在寻找一种方法,可以将此功能添加到我的所有Html中 当用户输入“foo”并提交表单时,在控制器级别,我通过模型得到它,例如“fuu” 我需要此功能以将某些Unicode字符替换为其他字符 让我在视图和控制器中显示我的代码: [HttpPost] public virtual ActionResult Create(MyModel model) { var x = model.Title; //I need variabl
[HttpPost]
public virtual ActionResult Create(MyModel model)
{
var x = model.Title;
//I need variable x have 'fuu' instead of 'foo', replaceing "o" by "u"
//...
}
视图:
控制器:
[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编写重写吗 正如我从代码中了解到的,当模型传递给控制器操作时,您希望模型准备就绪(已处理)。要实现这一点,唯一的方法是使用模型绑定。 但这种方法仅限于特定的类型/类/模型/视图模型或您所称的任何类型 您可以创建自己的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
//...
}
祝你好运。你能把你的问题说清楚一点吗?我有一些看法。每个视图都有一些文本框。在MVC之前,我有一种方法可以更正输入的文本,然后将其保存在db中。例如,我想用“b”替换所有的“a”。每次使用输入文本时,我都会调用该方法。现在在MVC中,我正在搜索一种通用方法,它适用于视图中的所有Html.TextboxFor。您希望通用的方法不能特定于视图项(例如:TextboxFor)。但它可以特定于“模型”或“视图模型”。如果您要做的是更改从客户端发布的数据,然后将其存储在数据库中。您可以对特定类型使用自定义模型绑定。是的,您是对的!我需要对客户端发布的数据进行更改,然后将其存储。