Der Standard-ModelBinder funktioniert nicht ordnungsgemäß
-
12-11-2019 - |
Frage
Ich habe folgende Struktur:
public class Dummy
{
public string Name { get; set; }
public InnerDummy Dum { get; set; }
}
public class InnerDummy
{
public string Name { get; set; }
}
Und ein ActionResult
das erhält a Dummy
[HttpPost]
public ActionResult Index(Dummy dum)
{
var dsad = dum;
//var dwss = idum;
return RedirectToAction("index");
}
Aus meiner Sicht habe ich:
@model TestMVC3Razor.Controllers.HomeController.Dummy
@using (Html.BeginForm())
{
@Html.TextBoxFor(o => o.Name)
@Html.EditorFor(o => o.Dum)
<br />
<br />
<input type="submit" />
}
Es wird gepostet
Name=xxx
Dum.Name=yyy
Aber wenn ich versuche zu bekommen dum.Dum.Name
auf der ActionResult
Ich bekomme null
anstatt yyy
.Ist das ein Bug oder einfach so?Benutze ich es nicht richtig?Muss ich dafür einen neuen Ordner implementieren?
Lösung
HI~ Ihre Ansicht sollte verwenden @Html.EditorFor(o => o.Dum.Name)
nicht @Html.EditorFor(o => o.Dum)
Und Postback-Controller:
[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");
}
Wenn Sie Probleme damit haben, lassen Sie es mich bitte wissen :)
Andere Tipps
Sie müssen das ziehen InnerDummy
aus dem Inneren heraus Dummy
Klasse.
Wenn der Standardmodellbinder das findet Dum
Eigenschaft wird versucht, ein Objekt vom Typ zu erstellen InnerDummy
, aber in seinem Kontext existiert das nicht.Referenzieren InnerDummy
So wie Sie es haben, müsste der Modellordner eine erstellen Dummy.InnerDummy
, aber es hat keine Möglichkeit, das zu wissen.
Herstellung InnerDummy
Ein direktes Mitglied des Namespace wird das Problem beheben.
Eventuell lässt sich das Problem auch durch eine Deklaration beheben Dum
als:
public Dummy.InnerDummy Dum { get; set; }
Allerdings bin ich mir da nicht sicher.