ModelBinder padrão não está funcionando corretamente
-
12-11-2019 - |
Pergunta
Tenho esta seguinte estrutura:
public class Dummy
{
public string Name { get; set; }
public InnerDummy Dum { get; set; }
}
public class InnerDummy
{
public string Name { get; set; }
}
E um ActionResult
que recebe um Dummy
[HttpPost]
public ActionResult Index(Dummy dum)
{
var dsad = dum;
//var dwss = idum;
return RedirectToAction("index");
}
Na minha opinião, tenho:
@model TestMVC3Razor.Controllers.HomeController.Dummy
@using (Html.BeginForm())
{
@Html.TextBoxFor(o => o.Name)
@Html.EditorFor(o => o.Dum)
<br />
<br />
<input type="submit" />
}
Está postando
Name=xxx
Dum.Name=yyy
Mas quando tento conseguir dum.Dum.Name
no ActionResult
eu recebo null
em vez de yyy
.Isso é um bug ou é apenas o que é?Não estou usando direito?Preciso implementar um novo fichário para isso?
Solução
OI ~ sua visualização deve usar @Html.EditorFor(o => o.Dum.Name)
não @Html.EditorFor(o => o.Dum)
E controlador de 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 você tiver problemas sobre isso, por favor me avise :)
Outras dicas
Você precisa puxar o InnerDummy
para fora de dentro do Dummy
aula.
Quando o model binder padrão encontra o Dum
propriedade ele tentará criar um objeto do tipo InnerDummy
, mas em seu contexto isso não existe.Referenciar InnerDummy
como você tem, o fichário do modelo precisaria criar um Dummy.InnerDummy
, mas não tem como saber disso.
Fazendo InnerDummy
um membro direto do namespace resolverá o problema.
Também pode ser possível resolver o problema declarando Dum
como:
public Dummy.InnerDummy Dum { get; set; }
Não tenho certeza sobre isso, no entanto.