我最近发布了我的 Advanced Controller 的新版本
这基本上是一个通用 Controller (ASHX),它在 ASP.net Webforms 上的行为类似于 MVC Controller ,从某种意义上说,它接收请求并自动调用所需的内部方法,从请求查询字符串或参数中解析其参数取决于 HTTP 动词并返回结果。 它做了更多,但这是我的主要初始功能。
根据请求信息创建对象和水合作用是该项目中最痛苦的部分,但最终我达到了与对 MVC Controller 执行相同请求类似的性能。
就像我说的,.net MVC Controller 实际上做同样的事情,但我从来没有设法了解如何做。
例如,如果我对 MVC Controller 执行此 AJAX 调用:
$.ajax({
type:'GET',
url: 'SomeData/List'
data:{filter: 'whatever'}
});
这将调用接收字符串过滤器属性的 Controller 方法。
但它会变得更复杂,因为我们可以调用接收复杂类型的 Controller ,具有嵌套的复杂类型和集合,并且“神奇地”在 Controller 参数中正确解析参数。
有谁知道这个管道是如何在 .net MVC 中完成的?
最佳答案
此过程称为模型绑定(bind)。有一个默认的 Model Binder,它将通过查看请求中的内容和 Controller 的期望,尝试将发布的值转换为复杂类型。
它根据约定执行此操作。显然, View 也实现了此约定,因此在将 View 和 Controller 与模型绑定(bind)器一起使用时,您不会遇到任何摩擦。
以下帖子更详细地解释了这个概念:
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
如果您在 google 上搜索“ASP.NET MVC 模型绑定(bind)器”,您会发现有关该主题的更多信息。
关于c# - .net MVC Controller 如何解析参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16809514/