Le modèle par défaut ne fonctionne pas correctement
-
12-11-2019 - |
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?
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.