在回发时用MVC 3中的模型对模型进行水合时出现问题
本文关键字:模型 问题 MVC | 更新日期: 2023-09-27 18:22:31
我有两个类似于的模型类
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
属性的一部分
我将依赖列表拆分为一个单独的模型,因为其中有很多管理代码,可以很好地分离关注点。
我需要做些什么才能让它正常工作?
我也遇到过类似的问题,将地址信息分离到一个单独的类中以更好地管理代码。最后,我不得不做更多的工作,让它返回并存储在对象中。
在您的DependencyEdit.cshtml中,尝试类似以下的内容
@模型相关性模型
@for (int i = 0; i < Model.DependencyComponentIDs.Count; i++) {
@Html.CheckBox(String.Format("Dependencies.DependencyComponentIDs[{0}]", i), false, new{ value = Model.Dependencies.DependencyComponentIDs[i] })
}
这不是一个很好的解决方案,但它对我来说已经成功了。你可能还想看看:如何在ASP.NET MVC中创建CheckBoxListFor扩展方法?。
我隐约记得有过类似的问题。你能试着用x.y或x_y为依赖项控件指定Id explicity吗?其中x是包装类,y是属性?如果没有,我会检查我是怎么做的。