Por defecto ModelBinder no funciona correctamente
-
12-11-2019 - |
Pregunta
Tengo la siguiente estructura:
public class Dummy
{
public string Name { get; set; }
public InnerDummy Dum { get; set; }
}
public class InnerDummy
{
public string Name { get; set; }
}
Y un ActionResult
que recibe un Dummy
[HttpPost]
public ActionResult Index(Dummy dum)
{
var dsad = dum;
//var dwss = idum;
return RedirectToAction("index");
}
En mi punto de vista que yo tengo:
@model TestMVC3Razor.Controllers.HomeController.Dummy
@using (Html.BeginForm())
{
@Html.TextBoxFor(o => o.Name)
@Html.EditorFor(o => o.Dum)
<br />
<br />
<input type="submit" />
}
Es la publicación de
Name=xxx
Dum.Name=yyy
Pero cuando trato de entrar dum.Dum.Name
en el ActionResult
Puedo conseguir null
en lugar de yyy
.Es esto un error o simplemente de la manera que es?No estoy usando ese derecho?Qué necesito para implementar un cuaderno nuevo para esto?
Solución
HOLA~ tu vista debe usar @Html.EditorFor(o => o.Dum.Name)
no @Html.EditorFor(o => o.Dum)
Y devolución de datos Controlador:
[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 usted tiene problemas al respecto, por favor haganmelo saber :)
Otros consejos
Usted necesita para tirar de la InnerDummy
salida desde el interior de la Dummy
clase.
Cuando el modelo predeterminado cuaderno encuentra el Dum
la propiedad se va a tratar de crear un objeto de tipo InnerDummy
, pero , en su contexto, eso no existe.Para hacer referencia a InnerDummy
como la tiene el modelo de cuaderno necesita para crear un Dummy.InnerDummy
, pero no tiene manera de saber eso.
Hacer InnerDummy
un miembro directo de la espacio de nombres va a solucionar el problema.
También puede ser posible para solucionar el problema declarando Dum
como:
public Dummy.InnerDummy Dum { get; set; }
No estoy seguro acerca de esto, sin embargo.