在回发时用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>&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属性的一部分

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

我需要做些什么才能让它正常工作?

在回发时用MVC 3中的模型对模型进行水合时出现问题

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

在您的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是属性?如果没有,我会检查我是怎么做的。