默认ModelBinder无法正常工作

时间:2011-05-12 02:14:46

标签: c# asp.net-mvc-3 modelbinders

我有以下结构:

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 个答案:

答案 0 :(得分:2)

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");
}

如果您有任何问题,请告诉我:)

答案 1 :(得分:0)

您需要从InnerDummy课程中拉出Dummy

当默认模型绑定器找到Dum属性时,它将尝试创建类型为InnerDummy的对象,但在其上下文中不存在。要提到InnerDummy,模型绑定器需要创建Dummy.InnerDummy,但无法知道。

使InnerDummy成为命名空间的直接成员将解决问题。

也可以通过将Dum声明为:

来解决问题
public Dummy.InnerDummy Dum { get; set; }
但是,我不确定这一点。