我有两个类似的模型类:
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> </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
属性
我已将依赖关系列表拆分为一个单独的模型,因为其中有很多管理代码可以创建良好的关注点分离。
我需要做些什么来实现这个目标?
答案 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?。