Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC2-自定义模型绑定器示例_Asp.net Mvc_Asp.net Mvc 2_Modelbinders_Custom Model Binder - Fatal编程技术网

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

Asp.net mvc ASP.NET MVC2-自定义模型绑定器示例,asp.net-mvc,asp.net-mvc-2,modelbinders,custom-model-binder,Asp.net Mvc,Asp.net Mvc 2,Modelbinders,Custom Model Binder,我试图找到一些为我需要处理的独特绑定场景构建自定义模型绑定器的示例,但我找到的所有文章都是针对MVC的旧版本的,这些版本在MVC2中不再相关。我一直在参考DefaultModelBinder源代码,试图对我需要做的事情有一个大致的感觉,但它比我的场景要复杂得多,我很难隔离需要实现的特定逻辑 我的目标是收集复选框/文本框对,对于所有的复选框对,我想创建一个复选框值和相关文本框值的键/值对。聚合此数据后,我需要对集合执行一些字符串序列化,以便将其存储在所需模型类型的字符串属性中。我已经以一种可管理的

我试图找到一些为我需要处理的独特绑定场景构建自定义模型绑定器的示例,但我找到的所有文章都是针对MVC的旧版本的,这些版本在MVC2中不再相关。我一直在参考DefaultModelBinder源代码,试图对我需要做的事情有一个大致的感觉,但它比我的场景要复杂得多,我很难隔离需要实现的特定逻辑

我的目标是收集复选框/文本框对,对于所有的复选框对,我想创建一个复选框值和相关文本框值的键/值对。聚合此数据后,我需要对集合执行一些字符串序列化,以便将其存储在所需模型类型的字符串属性中。我已经以一种可管理的格式从表单发送了数据,这将允许我将给定的复选框与特定的文本框关联起来,这只是想知道如何在需要它们的地方获取所有片段的问题


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

我不知道为什么你认为自从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
    }
}
以及你的行动:

public ActionResult Contact([ModelBinder(typeof(CustomModelBinder))]SomeModel m){
    //...
}

这就是您要查找的信息吗?

看看我博客上的几个示例。

这项技术完全适合我,但我觉得我应该使用
bindingContext.ValueProvider
而不是直接访问HttpContext(出于可测试性原因)。@Nathan Taylor,我明白了。在这种情况下,这里描述的技术可能会帮助您开始。S.Hanselman还提供了一个关于如何测试绑定器的示例:另外,如果您正在寻找基于特定(或通用)类型的模型绑定,请查看此处的帖子:网站已关闭,示例应发布在此处,而不是外部网站。