ASP.NET MVC2 - 自定义模型绑定器示例

Nat*_*lor 16 asp.net-mvc modelbinders custom-model-binder asp.net-mvc-2

我试图找到一些为我需要处理的独特绑定场景构建自定义模型绑定器的示例,但我发现的所有文章都是针对MVC2中不再相关的旧版MVC.我一直在引用DefaultModelBinder源代码,试图对我需要做的事情有一个普遍的感觉,但它比我的场景更复杂,我无法隔离我需要实现的特定逻辑.

我的目标是获取一组Checkbox/Textbox对,并且对于所有Checked对,我想创建Checkbox值和关联Textbox值的键/值对.在聚合这些数据之后,我需要对集​​合进行一些字符串序列化,这样我就可以将它存储在所需Model类型的字符串属性中.我已经以可管理的格式从表单发送数据,这将允许我将给定的复选框与特定的文本框相关联,这只是找出如何获取所需的所有部分的问题.

有谁知道一些最新的教程可以让我开始构建自定义模型绑定器?

Çağ*_*kin 12

我不知道为什么你认为自从MVC 1以来关于自定义模型绑定器已经发生了很多变化.但如果我明白你要做什么,那应该相当容易.

public class CustomModelBinder : DefaultModelBinder {
    public override object BindModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext) {

        NameValueCollection form = controllerContext.HttpContext.Request.Form;
        //get what you need from the form collection

        //creata your model
        SomeModel myModel = new SomeMode();
        myModel.Property = "value";
        //or add some model errors if you need to
        ModelStateDictionary mState = bindingContext.ModelState;
        mState.Add("Property", new ModelState { });
        mState.AddModelError("Property", "There's an error.");

        return myModel; //return your model
    }
}
Run Code Online (Sandbox Code Playgroud)

你的行动:

public ActionResult Contact([ModelBinder(typeof(CustomModelBinder))]SomeModel m){
    //...
}
Run Code Online (Sandbox Code Playgroud)

那是你要找的那种信息吗?

  • 这种技术对我来说完全有效,但我的印象是我应该使用`bindingContext.ValueProvider`而不是直接访问HttpContext(出于可测试性原因). (2认同)