Profit ModelBinder non funziona correttamente
-
12-11-2019 - |
Domanda
Ho questa struttura seguente:
public class Dummy
{
public string Name { get; set; }
public InnerDummy Dum { get; set; }
}
public class InnerDummy
{
public string Name { get; set; }
}
.
e un ActionResult
che riceve un Dummy
[HttpPost]
public ActionResult Index(Dummy dum)
{
var dsad = dum;
//var dwss = idum;
return RedirectToAction("index");
}
.
Sulla mia opinione ho:
@model TestMVC3Razor.Controllers.HomeController.Dummy
@using (Html.BeginForm())
{
@Html.TextBoxFor(o => o.Name)
@Html.EditorFor(o => o.Dum)
<br />
<br />
<input type="submit" />
}
.
Si sta pubblicando
Name=xxx
Dum.Name=yyy
.
Ma quando provo a ottenere dum.Dum.Name
sul ActionResult
ottengo null
invece di yyy
.È un bug o proprio come è?Non lo sto usando bene?Devo implementare un nuovo legante per questo?
Soluzione
Hi ~ La tua vista dovrebbe usare @Html.EditorFor(o => o.Dum.Name)
non @Html.EditorFor(o => o.Dum)
e controller postback:
[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");
}
.
Se hai problemi a riguardo, per favore fammi sapere :)
Altri suggerimenti
È necessario tirare fuori il InnerDummy
dall'interno della classe Dummy
.
Quando il modello predefinito Binder trova la proprietà Dum
, proverà a creare un oggetto di tipo InnerDummy
, ma nel suo contesto che non esiste.Per fare riferimento a InnerDummy
come si ha il modello Binder avrebbe bisogno di creare un Dummy.InnerDummy
, ma non ha modo di saperlo.
Realizzazione InnerDummy
Un membro diretto dello spazio dei nomi risolverà il problema.
Potrebbe anche essere possibile risolvere il problema dichiarando Dum
come:
public Dummy.InnerDummy Dum { get; set; }
.
Non sono sicuro di questo, però.