ModelBinder по умолчанию не работает должным образом - PullRequest
0 голосов
/ 12 мая 2011

У меня есть следующая структура:

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.Это ошибка или просто так?Я не использую это правильно?Нужно ли для этого реализовать новое связующее?

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

HI ~ ваш взгляд должен использовать @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");
}

Если у вас есть проблемы по этому поводу, пожалуйста, сообщитея знаю :)

0 голосов
/ 12 мая 2011

Вам нужно вытащить InnerDummy изнутри класса Dummy.

Когда средство связывания модели по умолчанию находит свойство Dum, оно пытается создать объект типа InnerDummy, но в его контексте этого не существует. Чтобы сослаться на InnerDummy, как у вас есть, связыватель модели должен будет создать Dummy.InnerDummy, но он не может этого знать.

Если сделать InnerDummy прямым членом пространства имен, это решит проблему.

Также можно исправить проблему, объявив Dum как:

public Dummy.InnerDummy Dum { get; set; }

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

...