2012-02-02 128 views
0

在MVC 3保湿模型与模型我也有类似的2模型类:故障回发

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> 

和编辑模板DependencyEdit .cshtml在EditorTemplates文件夹:

@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财产

我已经分裂依赖列表到一个单独的模型的一部分,因为有一个很大的管理代码它创造了一个很好的问题分离。

我需要做些什么才能使这个工作?

回答

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?

+0

我其实拿了这个[http://www.codeproject.com/Articles/292050/MVC3-Html-CheckBoxList-custom-extension](http://www.codeproject.com/Articles/292050/MVC3- Html-CheckBoxList-custom-extension)并且一直在调整它 – 2012-02-03 14:26:08

1

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