0

我正在使用 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 调试器的屏幕截图,因此您可以了解绑定的外观:

JSON 绑定到对象

知道为什么嵌套对象没有绑定吗?

4

1 回答 1

4

在您的JobTitle班级MinimumRequirements中必须是 a property,而不是field.

所以替换:

public MinimumRequirements MinimumRequirements;

和:

public MinimumRequirements MinimumRequirements { get; set; }

请记住,默认模型绑定器仅对属性进行操作,而不对字段进行操作。

同样从我可以看到您的JobTitle模型没有无参数构造函数,因此您不能将其用作操作参数,因为默认模型绑定器不知道如何实例化它。因此,请确保除了采用 a 的构造函数之外,DataRow您还有一个无参数构造函数,或者如果您希望它显示为操作参数,则必须为此类型编写自定义模型绑定器。

于 2012-08-14T18:10:18.783 回答