模型绑定(bind)也可以通过查询字符串工作吗?

如果我有一个类似的获取请求:

GET /Country/CheckName?Country.Name=abc&Country.Id=0 HTTP/1.1

CountryController中的以下方法是否将其oCountry参数包含ID和Name属性以及查询字符串中的值?
public ViewResult CheckCountryName(Country oCountry)
{
     //some code
     return View(oCountry);
}

由于某种原因,在oCountry对象中,我将Id设置为0,将Name设置为null。什么不见​​了 ?

最佳答案

是的,模型绑定(bind)支持从查询字符串进行绑定(bind)。但是,相同的模型绑定(bind)规则也适用于此:属性名称/表达式在您的请求和模型中应该匹配。

因此,如果您具有Name属性,则需要在查询字符串中具有Name键。如果编写Country.Name,则模型绑定(bind)将首先在该国家对象上寻找一个名为Country的属性,然后是一个Name属性。

因此,您不需要属性名称的Country前缀,因此您的请求应如下所示:

/Country/CheckName?Name=abc&Id=1 HTTP/1.1

或者,如果您无法更改请求,则可以使用BindAttribute为action参数指定前缀:
public ViewResult CheckCountryName([Bind(Prefix="Country")]Country oCountry)
{
     //some code
     return View(oCountry);
}

关于c# - 通过ASP.NET MVC中的查询字符串是否可以进行模型绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17329342/

10-12 14:58
查看更多