デフォルトのモデルバインダーが正しく機能していません
-
12-11-2019 - |
質問
私は次の構造を持っています:
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.Name
にActionResult
を取得しようとすると、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; }
.
これについてはわからない。
所属していません StackOverflow