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?

È stato utile?

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ò.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top