如何将JQuery模型绑定到嵌套对象

时间:2012-08-14 18:05:08

标签: asp.net-mvc json asp.net-mvc-3 json.net

我正在使用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 binding to object

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

1 个答案:

答案 0 :(得分:4)

JobTitle班级中,MinimumRequirements必须是property,而不是field

所以替换:

public MinimumRequirements MinimumRequirements;

使用:

public MinimumRequirements MinimumRequirements { get; set; }

请记住,默认模型绑定器仅在属性上运行,而不在字段上运行。

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