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

我正在尝试将具有复杂类型的视图模型传递给我的控制器。我已经从头到尾研究了这个主题的所有内容,但我仍然感到困惑。


问题:


当我单击提交按钮时,视图模型被传入,但 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 网络检查

https://img3.mukewang.com/64e183ab000117b907340377.jpg

最后的评论

我不确定是否需要使用 AJAX post 来执行此操作,或者我的变量名称格式是否正确。我很确定这是一个我不理解的具有约束力的问题。

如果有人能指出我正确的方向,我将非常感激。



慕仙森
浏览 114回答 1
1回答

慕神8447489

你的模板的这一部分有点错误。@for (int i = 1; i < Model.MacrosToUpdate.Count; i++){&nbsp; &nbsp; <tr>&nbsp; &nbsp; &nbsp; &nbsp; <td>@Html.TextBoxFor(m =>Model.MacrosToUpdate[i].FullPath)</td>&nbsp; &nbsp; &nbsp; &nbsp; <td>@Html.TextBoxFor(m => Model.MacrosToUpdate[i].CreatedAt)</td>&nbsp; &nbsp; &nbsp; &nbsp; <td>@Html.CheckBoxFor(b => Model.MacrosToUpdate[i].IsSelected)</td>&nbsp; &nbsp; </tr>}请更改以下内容并重试。@for (int i = 0; i < Model.MacrosToUpdate.Count;&nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; <tr>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <td>@i</td>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <td>@Html.TextBoxFor(m => m.MacrosToUpdate[i].FullPath)</td>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <td>@Html.TextBoxFor(m => m.MacrosToUpdate[i].CreatedAt)</td>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <td>@Html.CheckBoxFor(b => b.MacrosToUpdate[i].IsSelected)</td>&nbsp; &nbsp; &nbsp; &nbsp; </tr>&nbsp;}首先,您以 1 开始循环,这是根本原因。由于缺少第零个索引,模型绑定器无法正确绑定列表。
打开App,查看更多内容
随时随地看视频慕课网APP