ModelBinder по умолчанию не работает должным образом

StackOverflow https://stackoverflow.com/questions/5972631

  •  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; }

Хотя я в этом не уверен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top