質問

私は次の構造を持っています:

public class Dummy
{
    public string Name { get; set; }

    public InnerDummy Dum { get; set; }
}

public class InnerDummy
{
    public string Name { get; set; }
}
.

ActionResult を受信するDummy

[HttpPost]
public ActionResult Index(Dummy dum)
{
    var dsad = dum;
    //var dwss = idum;

    return RedirectToAction("index");
}
.

私のビューに私は持っています:

@model TestMVC3Razor.Controllers.HomeController.Dummy
@using (Html.BeginForm())
{
    @Html.TextBoxFor(o => o.Name)
    @Html.EditorFor(o => o.Dum)

    <br />
    <br />
    <input type="submit" />
}
.

投稿

Name=xxx
Dum.Name=yyy
.

しかしdum.Dum.NameActionResultを取得しようとすると、nullの代わりにyyyが取得されます。これはバグですか、それとも単なる方法ですか?私はそれを正しく使わないのですか?これに新しいバインダーを実装する必要がありますか?

役に立ちましたか?

解決

こんにちは〜あなたのビューは@Html.EditorFor(o => o.Dum.Name) を使うべきです

@Html.EditorFor(o => o.Dum)

とポストバックコントローラ:

[HttpPost]
public ActionResult Index(Dummy postback)
{
    var dsad = postback;
    var a = postback.Name;        //get Name of Dummy
    var b = postback.Dum.Name;    //get Name of InnerDummy of Dummy

    return RedirectToAction("index");
}
.

問題がある場合は、私に知らせてください:)

他のヒント

InnerDummyクラスの内側からDummyを引き出してください。

デフォルトモデルバインダーがDumプロパティを見つけると、InnerDummy型のオブジェクトを作成しようとしますが、そのコンテキストでは存在しません。モデルバインダーがInnerDummyを作成する必要があるため、Dummy.InnerDummyを参照するには、それを知る方法はありません。

InnerDummyの作成ネームスペースの直接メンバーは問題を解決します。

Dumを宣言して問題を解決することもできます。

public Dummy.InnerDummy Dum { get; set; }
.

これについてはわからない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top