嵌套模型属性不适用于@ Html.EditorFor?

时间:2012-04-04 21:13:41

标签: asp.net-mvc asp.net-mvc-3

我对嵌套属性有一个奇怪的问题..不确定这是否是设计的?当我做的时候

@Html.EditorFor(model => model.Name)

帖子工作,并填充模型。当我改为

@Html.EditorFor(model => model.Detail.Name)

model.Detail.Name在帖子上为空。我需要做些什么特别工作吗?

2 个答案:

答案 0 :(得分:1)

那应该有用。我不能责备。

型号:

public class ModelClass 
{ 
    public string Name { get; set; }
    public DetailClass Detail { get; set; }
}

public class DetailClass 
{
    public string Name { get; set; } 
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new ModelClass
        {
            Name = "model name",
            Detail = new DetailClass
            {
                Name = "detail name"
            }
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(ModelClass model)
    {
        return Content(
            string.Format(
                "name: {0}, detail.name: {1}", 
                model.Name, 
                model.Detail.Name
            )
        );
    }
}

查看:

@model ModelClass

@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.Name)
    @Html.EditorFor(x => x.Detail.Name)
    <button type="submit">OK</button>
}

2个属性被正确绑定。

答案 1 :(得分:0)

如果您使用的是EntityFramework,则应将该子项包含在查询中。

例如:

public MyClass getById(int id){
    return DbSet.Include(q => q.Detail).SingleOrDefault(q => q.Id == id);
}

然后,当您致电您的模型时,将包含详细信息。所以你可以使用Name.Detail.Name。