【发布时间】:2011-12-14 16:09:35
【问题描述】:
好吧,假设我有一个这样的 URL,它通过 HTTP 动词 GET 映射到我在下面的控制器操作:
GET /foo/bar?sort=asc&r=true
如何在下面的控制器操作中将此绑定到我的模型 Bar:
class Bar {
string SortOrder { get; set; }
bool Random { get; set; }
}
public ActionResult FooBar(Bar bar) {
// Do something with bar
return null;
}
请注意,属性名称不会也不一定与 URL 参数的名称匹配。此外,这些是可选的 url 参数。
【问题讨论】:
-
我只是添加一个具有匹配属性名称的类,但我很想看看您是否可以将模型绑定器配置为绑定到任意属性名称。也许有一些属性可以使用......
-
看不到,为什么属性和url参数不匹配?
-
@gdoron,他们可以,我只是强烈希望他们不匹配......我希望在属性上有一个属性,以明确说明正在绑定哪个 URL 参数到哪个属性。
-
@gdoron,是的,我可以让它们匹配。然而,所有其他优秀的 Web MVC 框架都有属性/注释,允许您指定应该绑定到属性的参数......这使得重构/维护更加简单。我很失望 ASP.NET MVC 没有这个而不必自己创建它。
-
您有一个面向外部的 API/合同,它隐含地依赖于内部类的结构/命名方式。按照约定进行编码非常棒,但框架应该让您可以选择在外部合同中明确表示。如果 Joe Nooby Developer 进来并重命名/删除模型上的属性,现在我的外部合同由于隐式合同而破裂。