我正在使用ASP.NET MVC3和C#。我有这门课:
public class JobTitle
{
public int ID { get; set; }
public string Title { get; set; }
public MinimumRequirements MinimumRequirements;
public JobTitle(DataRow row)
{
ID = Utilities.SafeInt(row["JobTitle_ID"]);
Title = Utilities.SafeString(row["Job_Title"]);
MinimumRequirements = new MinimumRequirements()
{
Certifications = Utilities.SafeInt(row["....."]),
ID = Utilities.SafeInt(row["....."]),
Languages = Utilities.SafeString(row["....."]),
MinimumEducation = Utilities.SafeString(row["....."]),
MinimumGrade = Utilities.SafeString(row["....."]),
MinimumYOS = Utilities.SafeInt(row["....."])
};
}
}
发送的JSON看起来像这样:
{
"ID": 401,
"Title": "MinReq",
"MinimumRequirements": {
"ID": 0,
"MinimumEducation": "Bachelors",
"MinimumGrade": "93",
"MinimumYOS": 10,
"Certifications": 1,
"Languages": "English"
}}
这是我的c#控制器方法的签名: [HttpPut] public ActionResult JobTitle(JobTitle jobTitle,bool doUpdate = true)
ID和Title属性进入并填充数据,一切正常。但是MinimumRequirements嵌套对象为空。
我也试过这个:
[HttpPut] public ActionResult JobTitle([Bind(Prefix =“MinimumRequirements”)] JobTitle jobTitle,bool doUpdate = true)
(也没用)
这是VS调试器的屏幕截图,让您知道绑定的外观:
知道为什么嵌套对象没有绑定吗?
答案 0 :(得分:4)
在JobTitle
班级中,MinimumRequirements
必须是property
,而不是field
。
所以替换:
public MinimumRequirements MinimumRequirements;
使用:
public MinimumRequirements MinimumRequirements { get; set; }
请记住,默认模型绑定器仅在属性上运行,而不在字段上运行。
同样从我可以看到你的JobTitle
模型没有无参数构造函数,所以你不能将它用作动作参数,因为默认的模型绑定器不知道如何实例化它。因此,除了使用DataRow
的构造函数之外,还要确保您还有一个无参数构造函数,或者如果您希望它显示为操作参数,则必须为此类型编写自定义模型绑定程序。