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 ネストされたオブジェクトは null になります。

私もこれを試しました:

[HttpPut] public ActionResult JobTitle([Bind(Prefix = "MinimumRequirements")]JobTitle jobTitle, bool doUpdate = true)

(それもうまくいきませんでした)

VS デバッガーのスクリーンショットを次に示します。バインドがどのように見えるかがわかります。

オブジェクトへの JSON バインディング

ネストされたオブジェクトがバインドされていない理由は何ですか?

4

1 に答える 1

4

JobTitleクラスでは、ではなく、でMinimumRequirementsある必要があります。propertyfield

したがって、置き換えます:

public MinimumRequirements MinimumRequirements;

と:

public MinimumRequirements MinimumRequirements { get; set; }

デフォルトのモデルバインダーは、フィールドではなく、プロパティでのみ動作することに注意してください。

また、私が見る限り、JobTitleモデルにはパラメーターのないコンストラクターがないため、デフォルトのモデルバインダーがインスタンス化する方法を知らないため、アクション引数として使用することはできません。したがって、を使用するコンストラクターに加えDataRowて、パラメーターのないコンストラクターもあることを確認してください。そうしないと、アクションパラメーターとして表示する場合は、このタイプのカスタムモデルバインダーを作成する必要があります。

于 2012-08-14T18:10:18.783 に答える