Question

J'ai cette structure suivante:

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

    public InnerDummy Dum { get; set; }
}

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

Et un ActionResult qui reçoit un Dummy

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

    return RedirectToAction("index");
}

À mon avis, j'ai:

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

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

C'est publier

Name=xxx
Dum.Name=yyy

Mais quand j'essaye d'obtenir dum.Dum.Name sur le ActionResult Je reçois null à la place de yyy. Est-ce un bug ou simplement comme ça? Est-ce que je ne l'utilise pas non? Dois-je implémenter un nouveau classeur pour cela?

Était-ce utile?

La solution

Salut ~ votre vue devrait utiliser @Html.EditorFor(o => o.Dum.Name)

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

Et contrôleur post-dos:

[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");
}

Si vous avez des problèmes à ce sujet, faites-le moi savoir :)

Autres conseils

Vous devez tirer le InnerDummy de l'intérieur du Dummy classer.

Lorsque le liant du modèle par défaut trouve le Dum propriété Il essaiera de créer un objet de type InnerDummy, mais dans son contexte qui n'existe pas. Pour référence InnerDummy Comme vous en avez, le classeur du modèle devrait créer un Dummy.InnerDummy, mais il n'a aucun moyen de le savoir.

Fabrication InnerDummy Un membre direct de l'espace de noms résoudra le problème.

Il peut également être possible de résoudre le problème en déclarant Dum comme:

public Dummy.InnerDummy Dum { get; set; }

Mais je ne suis pas sûr de cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top