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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top