C# 传递给控制器时,具有复杂类型的视图模型为空
我正在尝试将具有复杂类型的视图模型传递给我的控制器。我已经研究了所有我能从上到下研究这个问题的东西,但我仍然感到困惑 问题: 单击“提交”按钮时,会传入视图模型,但MacroInfo属性列表为空 更新索引模型C# 传递给控制器时,具有复杂类型的视图模型为空,c#,asp.net-mvc,razor,model-view-controller,viewmodel,C#,Asp.net Mvc,Razor,Model View Controller,Viewmodel,我正在尝试将具有复杂类型的视图模型传递给我的控制器。我已经研究了所有我能从上到下研究这个问题的东西,但我仍然感到困惑 问题: 单击“提交”按钮时,会传入视图模型,但MacroInfo属性列表为空 更新索引模型 public class UpdateIndexViewModel { //This view model will become larger later public List<MacroInfo> MacrosToUpdate { get; set; }
public class UpdateIndexViewModel
{
//This view model will become larger later
public List<MacroInfo> MacrosToUpdate { get; set; }
}
控制器动作
[HttpPost]
public ActionResult Submit(UpdateIndexViewModel updateIndexViewModel)
{
//updateIndexViewModel.MacrosToUpdate is null ??
}
索引视图
@model EplanInterface.Core.ViewModels.UpdateIndexViewModel
@using (Html.BeginForm("Submit", "Update", FormMethod.Post))
{
<table style="width:100%" , class="table-bordered">
<thead>
<tr>
<th>#</th>
<th>Macro Path</th>
<th>Created At</th>
<th>Update</th>
</tr>
</thead>
@for (int i = 1; i < Model.MacrosToUpdate.Count; i++)
{
<tr>
<td>@Html.TextBoxFor(m =>Model.MacrosToUpdate[i].FullPath)</td>
<td>@Html.TextBoxFor(m => Model.MacrosToUpdate[i].CreatedAt)</td>
<td>@Html.CheckBoxFor(b => Model.MacrosToUpdate[i].IsSelected)</td>
</tr>
}
</table>
<input type="submit" class="btn btn-primary" value="Submit"/>
}
@model EplanInterface.Core.ViewModels.UpdateIndexViewModel
@使用(Html.BeginForm(“提交”、“更新”、FormMethod.Post))
{
#
宏路径
创建于
更新
@对于(int i=1;iModel.MacrosToUpdate[i].FullPath)
@Html.TextBoxFor(m=>Model.MacrosToUpdate[i].CreatedAt)
@(b=>Model.MacrosToUpdate[i].IsSelected)的Html.CheckBoxFor
}
}
我尝试过的
我尝试将传入的控制器操作属性更改为列表宏更新
,但执行此操作时,该属性仍然为空
铬网检测
[HttpPost]
public ActionResult Submit(UpdateIndexViewModel updateIndexViewModel)
{
//updateIndexViewModel.MacrosToUpdate is null ??
}
最后的评论
我不确定是否需要使用AJAX post来完成此操作,或者我的变量名是否格式不正确。我很确定这是一个我不理解的有约束力的问题
如果有人能给我指出正确的方向,我将非常感激。您的模板的这一部分有点错误
@for (int i = 1; i < Model.MacrosToUpdate.Count; i++)
{
<tr>
<td>@Html.TextBoxFor(m =>Model.MacrosToUpdate[i].FullPath)</td>
<td>@Html.TextBoxFor(m => Model.MacrosToUpdate[i].CreatedAt)</td>
<td>@Html.CheckBoxFor(b => Model.MacrosToUpdate[i].IsSelected)</td>
</tr>
}
@for(int i=1;iModel.MacrosToUpdate[i].FullPath)
@Html.TextBoxFor(m=>Model.MacrosToUpdate[i].CreatedAt)
@(b=>Model.MacrosToUpdate[i].IsSelected)的Html.CheckBoxFor
}
请更改以下内容,然后重试
@for (int i = 0; i < Model.MacrosToUpdate.Count;
{
<tr>
<td>@i</td>
<td>@Html.TextBoxFor(m => m.MacrosToUpdate[i].FullPath)</td>
<td>@Html.TextBoxFor(m => m.MacrosToUpdate[i].CreatedAt)</td>
<td>@Html.CheckBoxFor(b => b.MacrosToUpdate[i].IsSelected)</td>
</tr>
}
(int i=0;i首先,您以1开始循环,这是根本原因。由于缺少第0个索引,Model binder无法正确绑定列表。我认为您需要在控制器帖子中将
UpdateIndexViewModel UpdateIndexViewModel
更改为list macrosToUpdate
method@MuhammadHannan我已经试过了。这是一个好主意lso返回null。