ModelBinder по умолчанию не работает должным образом
-
12-11-2019 - |
Вопрос
У меня есть следующая структура:
public class Dummy
{
public string Name { get; set; }
public InnerDummy Dum { get; set; }
}
public class InnerDummy
{
public string Name { get; set; }
}
И ActionResult
который получает Dummy
[HttpPost]
public ActionResult Index(Dummy dum)
{
var dsad = dum;
//var dwss = idum;
return RedirectToAction("index");
}
На мой взгляд у меня есть:
@model TestMVC3Razor.Controllers.HomeController.Dummy
@using (Html.BeginForm())
{
@Html.TextBoxFor(o => o.Name)
@Html.EditorFor(o => o.Dum)
<br />
<br />
<input type="submit" />
}
Это публикация
Name=xxx
Dum.Name=yyy
Но когда я пытаюсь получить dum.Dum.Name
на ActionResult
я получил null
вместо yyy
.Это баг или так оно и есть?Я не использую его правильно?Нужно ли мне для этого внедрять новое связующее?
Решение
Привет~ ваше представление должно использовать @Html.EditorFor(o => o.Dum.Name)
нет @Html.EditorFor(o => o.Dum)
И контроллер обратной передачи:
[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");
}
Если у вас есть проблемы по этому поводу, пожалуйста, дайте мне знать :)
Другие советы
Вам нужно вытащить InnerDummy
снаружи изнутри Dummy
сорт.
Когда связыватель модели по умолчанию находит Dum
свойство, он попытается создать объект типа InnerDummy
, но в его контексте этого не существует.Для ссылки InnerDummy
как у вас есть, связующему модели необходимо будет создать Dummy.InnerDummy
, но у него нет возможности узнать это.
Изготовление InnerDummy
прямой член пространства имен решит проблему.
Также возможно решить проблему, объявив Dum
как:
public Dummy.InnerDummy Dum { get; set; }
Хотя я в этом не уверен.