我有两个类,第一个包含List。 VIEW接收List作为模型。 当我发布视图时,我能够在控制器中检索每个简单属性。但列表<>对于SubModel,它始终为null。
这两个类:
public class MyModel
{
public int ModelId {get;set;}
public string Description {get;set;}
public List<SubModel> SubModels {get;set;}
}
public class SubModel
{
public int MySubModelId {get;set;}
public string Description {get;set;}
}
在视图页面中,收到的模型是
@model List<MyModel>
根据互联网上的建议,我创建了一个编辑器编辑器,以便在视图中呈现我的课程:
@model MyModel
<tr id="@Model.ModelId">
@Html.HiddenFor(m => m.ModelId)
@Html.HiddenFor(m => m.Description)
<td>@Model.Description</td>
</tr>
@for(int i = 0; i < Model.SubModels.Count; i++)
{
// How to render the class here to be able to be post in the controller?
// @Html.HiddenFor(m => m.SubModels[i]) will not work of course...
}
答案 0 :(得分:0)
不幸的是HiddenFor
不会递归,但您可以手动执行:
@for (int i = 0; i < Model.SubModels.Count; i++)
{
// postback everything
@Html.HiddenFor(m => m.SubModels[i].MySubModelId)
@Html.HiddenFor(m => m.SubModels[i].Description)
}
只需为每个子模型发回MySubModelId
就足以阻止Model.SubModels
为空。
通常我只回发ID,重新加载动作方法中的其他所有内容。
答案 1 :(得分:0)
就像隐藏主模型的Id的方式一样,您还需要隐藏每个子模型的Id。否则程序无法跟踪它们。在for循环中包含隐藏字段以覆盖每个子模型。
@Html.HiddenFor(m => m.SubModels[i].MySubModelId)
(如果这不能解决问题,那么问题最有可能发生在您的控制器中,您应该发布该问题以解决其他可能性。)
答案 2 :(得分:0)
答案是:为包含List&lt;&gt;的类的每个属性创建一个EditorFor模板。能够将它带入控制器。
谢谢大家的帮助,因为有些人给了我一些想法。