为了账号安全,请及时绑定邮箱和手机立即绑定

复杂类型的视图模型传递给控制器​​时为 null

复杂类型的视图模型传递给控制器​​时为 null

C#
慕仙森 2023-08-20 11:07:47
我正在尝试将具有复杂类型的视图模型传递给我的控制器。我已经从头到尾研究了这个主题的所有内容,但我仍然感到困惑。问题:当我单击提交按钮时,视图模型被传入,但 MacroInfo 属性列表为空。更新索引视图模型public class UpdateIndexViewModel{    //This view model will become larger later    public List<MacroInfo> MacrosToUpdate { get; set; }}宏信息public class MacroInfo{    public bool IsSelected { get; set; }    public string FullPath { get; set; }    public string Id { get; set; }    public DateTime CreatedAt { 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"/>}我尝试过的我尝试更改传入的控制器操作属性List<MacroInfo> macrosToUpdate,但执行此操作时该属性仍然为空。Chrome 网络检查最后的评论我不确定是否需要使用 AJAX post 来执行此操作,或者我的变量名称格式是否正确。我很确定这是一个我不理解的具有约束力的问题。如果有人能指出我正确的方向,我将非常感激。
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

你的模板的这一部分有点错误。


@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 = 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>

 }

首先,您以 1 开始循环,这是根本原因。由于缺少第零个索引,模型绑定器无法正确绑定列表。


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信