模型绑定泛型列表在 asp.net mvc 中为 null

本文关键字:net mvc 中为 null asp 绑定 泛型 列表 模型 | 更新日期: 2023-09-27 17:56:55

我在索引中的剃刀中绑定对象.html:

视图

@using (Ajax.BeginForm("Save", "Unit", new AjaxOptions { OnSuccess = "onSuccess" }))
    {
<button type="submit" class="btn btn-default" id="saveUnits"><i class="fa fa-save"></i></button>

    <table>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    @Html.HiddenFor(modelItem => item.UnitId)
                    <td>
                        @Html.EditorFor(modelItem => item.Name)
                    </td>
                    <td>
                        @Html.EditorFor(modelItem => item.ErrorText)
                    </td>
                </tr>
            }
        </tbody>
    </table>
}

我已经用小提琴手抓取了发送到我的动作参数的数据,得到了这个:

item.UnitId=5&
item.Name=111111111111&
item.ErrorText=fsdddddddddddddddd+&
item.UnitId=5&
item.Name=+&
item.ErrorText=dddddd+&

行动

public ActionResult Save(List<Unit> units )
{
    return new EmptyResult();   
}

视图模型

public class Unit
{
    [HiddenInput(DisplayValue = false)]
    public int UnitId { get; set; }
    [DataType(DataType.MultilineText)]
    public string Name { get; set; }
    [DataType(DataType.MultilineText)]
    public string ErrorText { get; set; 
}

为什么我的单位实例为空?属性匹配,因此应绑定它们!

我忽略了什么吗?

模型绑定泛型列表在 asp.net mvc 中为 null

您需要使用 for 循环而不是foreach循环。此外,最好使模型类具有一个集合属性。

您的模型可能是这样的:

public class UnitsViewModel
{
    public List<Unit> Units { get; set; }
    public class Unit
    {
        [HiddenInput(DisplayValue = false)]
        public int UnitId { get; set; }
        [DataType(DataType.MultilineText)]
        public string Name { get; set; }
        [DataType(DataType.MultilineText)]
        public string ErrorText { get; set; }
    }
}

你可以在cshtml中执行以下操作:

@for (int i = 0; i < Model.Count; i++)
{
    <tr>
        @Html.HiddenFor(m => m.Units[i].UnitId)
        <td>
            @Html.EditorFor(m => m.Units[i].Name)
        </td>
        <td>
            @Html.EditorFor(m => m.Units[i].ErrorText)
        </td>
    </tr>
}