C# 将嵌套类列表从视图绑定到控制器
我需要将嵌套类中的列表绑定到ActionMethod 现在,在调用ActionMethod时(请看下面),ActionItemList为null 不幸的是,我无法将列表移动到主模型中 这是我的主要模型:C# 将嵌套类列表从视图绑定到控制器,c#,asp.net-mvc,model-view-controller,C#,Asp.net Mvc,Model View Controller,我需要将嵌套类中的列表绑定到ActionMethod 现在,在调用ActionMethod时(请看下面),ActionItemList为null 不幸的是,我无法将列表移动到主模型中 这是我的主要模型: public class StateViewModel { public EmergencyOperationActionListModel ActionListModel { get; set; } public EmergencyInfoModel InfoModel
public class StateViewModel
{
public EmergencyOperationActionListModel ActionListModel { get; set; }
public EmergencyInfoModel InfoModel
public EmergencyInfoCauseListModel CauseListModel { get; set; }
}
和嵌套的一个:
public class EmergencyInterventiActionListModel
{
public string Firefighters { get; set; }
public string ExternalAssistance { get; set; }
public string PlacesDescription { get; set; }
public List<ActionItemModel> ActionItemList { get; set; }
}
公共类紧急干预列表模型
{
公共字符串{get;set;}
公共字符串外部协助{get;set;}
公共字符串位置描述{get;set;}
公共列表ActionItemList{get;set;}
}
观点:
@model Emergencies.Models.StatoViewModel
//...code code code
@using (Html.BeginForm("EditOps", "Operations")
{
<table class="table table-responsive table-hover" style="margin-bottom: 0px;">
<thead class="headOperations">
<tr>
<td>
CompanyName
</td>
<td>
Workers
</td>
<td>
Due Date
</td>
<td>
Start Date
</td>
<td>
End Date
</td>
<td>
Action
</td>
</tr>
</thead>
@if (Model.ActionListModel != null)
{
for (int i = 0; i < Model.ActionListModel.ActionItemList.Count(); i++)
{
<tr>
<td>
@Html.HiddenFor(m=>m.ActionListModel.ActionItemList[i].Id)
@Html.EditorFor(m => m.ActionListModel.ActionItemList[i].CompanyName, new { htmlAttributes = new { id = "companyEdit_" + Model.ActionListModel.ActionItemList[i].Id, @class = "editBoxForInterventi" } })
</td>
<td>
@Html.EditorFor(m => m.ActionListModel.ActionItemList[i].NumberOfWorkers, new { htmlAttributes = new { id = "workersEdit_" + Model.ActionListModel.ActionItemList[i].Id, style = "width:40px", @class = "editBoxForInterventi" } })
</td>
<td>
<div class="input-group date" id="duedateCalendar_@Model.ActionListModel.ActionItemList[i].Id">
@Html.EditorFor(m => m.ActionListModel.ActionItemList[i].DueDate, new { htmlAttributes = new { onclick = "CalendarDue('" + Model.ActionListModel.ActionItemList[i].Id + "')", id = "duedateEdit_" + Model.ActionListModel.ActionItemList[i].Id, @class = "editBoxForInterventi form-control dueDateCalendar", @readonly = "readonly" } })
</div>
</td>
<td>
<div class="input-group date" id="starttimeCalendar_@Model.ActionListModel.ActionItemList[i].Id">
@Html.EditorFor(m => m.ActionListModel.ActionItemList[i].StartTime, new { htmlAttributes = new { id = "starttimeEdit_" + Model.ActionListModel.ActionItemList[i].Id, @class = "editBoxForInterventi form-control starttimeCalendar", @readonly = "readonly" } })
</div>
</td>
<td>
<div class="input-group date" id="endtimeCalendar_@Model.ActionListModel.ActionItemList[i].Id">
@Html.EditorFor(m => m.ActionListModel.ActionItemList[i].EndTime, new { htmlAttributes = new { id = "endtimeEdit_" + Model.ActionListModel.ActionItemList[i].Id, @class = "editBoxForInterventi form-control endtimeCalendar", @readonly = "readonly" } })
</div>
</td>
<td></td>
</tr>
}
}
</table>
<button type="submit" class="submit-with-icon btn btn-flussi-add" name="doButton" value="save">
<span class="glyphicon glyphicon-pencil"></span>
</button>
}
//code code code...
@model.Models.StatoViewModel
//…代码
@使用(Html.BeginForm(“EditOps”,“Operations”)
{
公司名称
工人
到期日
开始日期
结束日期
行动
@if(Model.ActionListModel!=null)
{
对于(int i=0;im.ActionListModel.ActionItemList[i].Id)
@EditorFor(m=>m.ActionListModel.ActionItemList[i].CompanyName,new{htmlAttributes=new{id=“companyEdit”+Model.ActionListModel.ActionItemList[i].id,@class=“EditBoxForInterventii”})
@EditorFor(m=>m.ActionListModel.ActionItemList[i].NumberOfWorkers,new{htmlAttributes=new{id=“workersEdit”+Model.ActionListModel.ActionItemList[i].id,style=“width:40px”,@class=“editBoxForInterventi”})
@Html.EditorFor(m=>m.ActionListModel.ActionItemList[i].DueDate,new{HtmlatAttributes=new{onclick=“CalendarDue(”+Model.ActionListModel.ActionItemList[i].Id+”,Id=“duedateEdit”+Model.ActionListModel.ActionItemList[i].Id”,@class=“EditBoxForInterferti form control dueDateCalendar”(@readonly=“readonly”})
@EditorFor(m=>m.ActionListModel.ActionItemList[i].StartTime,new{HtmlatAttributes=new{id=“starttimeEdit”+Model.ActionListModel.ActionItemList[i].id,@class=“EditBoxForInterferti表单控件starttimeCalendar”,@readonly=“readonly”})
@EditorFor(m=>m.ActionListModel.ActionItemList[i].EndTime,新的{htmlAttributes=new{id=“endtimeEdit”+Model.ActionListModel.ActionItemList[i].id,@class=“EditBoxForInterferti表单控件endtimeCalendar”,@readonly=“readonly”})
}
}
}
//代码代码。。。
最后,控制器:
public ActionResult EditOps( List<ActionItemModel> ActionItemList )
{
//code
}
公共ActionResult编辑操作(列表ActionItemList)
{
//代码
}
只需更改EditOps方法签名即可获得以下内容
public ActionResult EditOps(StateViewModel modelPosted)
{
//access modelPosted here.
}
整个模型按照视图中的@model指令进行序列化。表单应绑定到模型本身。在EditOps中将类型更改为StateViewModel。忘记提及:我有(并使用)StateViewModel中的其他属性,因此我无法更改它。我不是指更改模型…更改EditOps方法的签名!您的视图根据页面顶部的@model指令绑定到模型。这是表单数据在发布时将序列化为的内容!即EditOps(StateViewModel modelPosted)谢谢@Wheels 73。根据您的建议,我将签名从列表ActionItemList更改为EmergencyOperationActionListModel ActionListModel,现在它可以工作了。Ofc名称必须匹配。不客气……我会将其作为您的答案发布。干杯