我最近发布了我的Advanced Controller
的新版本这基本上是一个通用控制器(ASHX),它在ASP.net Webforms上运行,就像MVC控制器一样,它接收请求并自动调用所需的内部方法,从请求查询字符串或参数解析其参数取决于HTTP谓词并返回结果。 它做得更多,但这是我的主要初始功能。
请求信息中的对象创建和水合是项目中最痛苦的部分,但最终我达到了与MVC控制器相同的性能。
就像我说的那样,.net MVC控制器实际上也是如此,但我从未设法了解如何。
例如,如果我执行此AJAX调用MVC控制器:
$.ajax({
type:'GET',
url: 'SomeData/List'
data:{filter: 'whatever'}
});
这将调用一个接收String过滤器属性的控制器方法。
但它可以变得更复杂,因为我们可以调用接收复杂类型的控制器,嵌套的复杂类型和集合,并且“神奇地”在控制器参数中正确地解析参数。
有谁知道这个管道是如何在.net MVC中完成的?
答案 0 :(得分:4)
此过程称为模型绑定。有一个默认的Model Binder,它会尝试通过查看请求中的内容和控制器期望的内容将发布的值转换为复杂类型。
它基于惯例来做到这一点。显然,视图也实现了这个约定,因此在使用Model Binder的视图和控制器时不会有任何摩擦。
以下帖子更详细地解释了这个概念:
http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx http://odetocode.com/blogs/scott/archive/2009/05/05/iterating-on-an-asp-net-mvc-model-binder.aspx http://www.singingeels.com/Articles/Model_Binders_in_ASPNET_MVC.aspx
如果你谷歌搜索“ASP.NET MVC模型活页夹”,你会发现更多关于这个主题的信息。