在回发时使用MVC 3中的模型为模型补充水分

时间:2012-02-02 22:49:16

标签: c# asp.net-mvc model

我有两个类似的模型类:

class DependenciesModel{
    List<int> DependencyComponentIDs { get; set; }
}

class ComponentModel{
    int ComponentID { get; set; }
    string Name { get; set; }
    DependenciesModel Dependencies { get; set; }
}

视图使用如下所示:

@model ComponentModel

@Html.HiddenFor(m => m.ComponentID)
<table>
    <tr>
        <td>@Html.LabelFor(m => m.Name)</td>
        <td>@Html.TextBoxFor(m => m.Name)</td>
        <td>@Html.ValidationMessageFor(m => m.Name)</td>
    </tr>
    <tr>
        <td>Dependencies</td>
        <td>@Html.EditorFor(m => m.Dependencies, "DependencyEdit")</td>
        <td>&nbsp;</td>
    </tr>
</table>

EditorTemplates文件夹中的编辑器模板DependencyEdit.cshtml:

@model DependenciesModel

// There is more to this but I'm simplifying to get to the point
@Html.CheckBoxListFor(model => model.DependencyComponentIDs)

我看到在Fiddler中回发的值,但在控制器中Dependencies属性为空。

有趣的是,发布的字段值只是DependencyComponentIDs,没有任何迹象表明它们属于Dependencies属性

我已将依赖关系列表拆分为一个单独的模型,因为其中有很多管理代码可以创建良好的关注点分离。

我需要做些什么来实现这个目标?

2 个答案:

答案 0 :(得分:1)

我依稀记得有类似的问题。你能尝试用x.y或x_y来指定依赖关系控件的Id explicilty,其中x是包装类,y是属性吗?如果没有,我会检查我是如何做到的。

答案 1 :(得分:1)

我遇到了类似的问题,将地址信息分离到一个单独的类中,以便更好地进行代码管理。最后,我不得不做更多的工作让它返回并存储在对象中。

在DependencyEdit.cshtml中,尝试类似这样的内容

@model DependenciesModel

@for (int i = 0; i < Model.DependencyComponentIDs.Count; i++) {
     @Html.CheckBox(String.Format("Dependencies.DependencyComponentIDs[{0}]", i), false, new{ value = Model.Dependencies.DependencyComponentIDs[i] })
}

这不是一个很好的解决方案,但这对我来说已经成功了。您可能还想查看:How to create a CheckBoxListFor extension method in ASP.NET MVC?