【问题标题】:ASP.NET MVC2 - Custom Model Binder ExamplesASP.NET MVC2 - 自定义模型绑定示例
【发布时间】:2011-01-21 13:59:24
【问题描述】:

我试图找到一些为我需要处理的独特绑定场景构建自定义模型绑定器的示例,但我发现的所有文章都是针对旧版本的 MVC,它们在 MVC2 中不再相关。我一直在参考 DefaultModelBinder 源代码,试图大致了解我需要做什么,但它比我的场景更复杂,而且我无法隔离我需要实现的特定逻辑。

我的目标是收集 Checkbox/Textbox 对的集合,对于所有 Checked 对,我想创建一个包含 Checkbox 值和关联文本框值的键/值对。聚合这些数据后,我需要对集​​合进行一些字符串序列化,以便将其存储在所需模型类型的字符串属性中。我已经以可管理的格式从表单发送数据,这将允许我将给定的 Checkbox 与特定的 Textbox 相关联,这只是弄清楚如何在我需要的地方获取所有部分的问题。

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 modelbinders custom-model-binder


    【解决方案1】:

    我不知道为什么您认为自 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,我明白了。在这种情况下,此处描述的技术可能会帮助您入门。 hanselman.com/blog/… S. Hanselman 还提供了一个关于如何测试活页夹的示例:stackoverflow.com/questions/253574/…
    • 另外,如果您正在寻找基于特定(或通用)类型的模型绑定,请查看此处的帖子:stackoverflow.com/questions/1487005/…
    【解决方案2】:

    看看我博客上Custom MVC Model binders 的几个例子。

    【讨论】:

    • 网站已关闭,应在此处发布示例 - 而不是外部网站。
    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多