0

我正在尝试将具有列表属性的模型从视图传递给发布操作。该列表在发布时返回 null,但我们需要包含新项目的列表来更新其信息。我的模型如下所示:

    public class Person()
    {
    internal string Name {get;set;}
    internal decimal Age {get;set;}
    internal List<int> Rate {get;set;}
    }

视图填充了他们当前的信息,我们使用 foreach 遍历列表,并为编辑功能生成文本框。当用户在编辑所需的值后点击提交时,视图将转到 [HttpPost] 操作,但值为空。

视图被 @using (Html.BeginForm(Model)) 包围,在提交时,模型被传递给 post 操作,但列表为空。填充所有其他值。

有任何想法吗?PS 我们正在使用 c# 和 Razor View Engine 抱歉,但列表仍然没有传递给模型这里是 4 循环。

     @{ int i = 0;}
        <table>
        @for (i = 0; i < Model.VendorContracts.Count; i++ )
        {

            if (i == 0)
            {
                    <tr>
                        <th>
                            Vendor Contracts
                        </th>
                        <th>
                        Effective Date
                        </th>
                    </tr>

            }
            if (i < 5)
            {
                <tr>
                    <td>@Model.VendorContracts[i]
                    </td>

                    <td>@Html.TextBoxFor(model => model.EffectiveDates[i])</td>
                </tr>
            }
            if (i == 5 || i == 10 || i == 15 || i == 20)
            {
                @:</table>
                @:<table>
                }
            if (i >= 5)
            {
                if (i == 5 || i == 10 || i == 15 || i == 20)
                {
                <tr>
                <th>Vendor Contracts
                </th>
                <th>
                Effective Date
                </th>
                </tr>
                }
            <tr>
            <td>
            @Model.VendorContracts[i]
            </td>
            <td>@Html.TextBoxFor(model => model.EffectiveDates[i])</td>
            </tr>
            }
        } 
        </table>
4

2 回答 2

1

问题出在你的foreach循环上。您应该将其更改为for循环,并且绑定应该可以正常工作。

检查这些类似的问题和答案:

ASP.NET MVC 4 - for 循环发布模型集合属性,但 foreach 没有

MVC 剃刀 @foreach

于 2013-09-30T15:52:23.857 回答
0

我可以给你一个部分答案。要加载列表项,以便它们在 HttpPost 上返回,您需要在视图中执行此操作

for(int idx = 0;idx < Model.Rate.Count;idx++)
{
    @Html.TextBox("Foo", Model.Rate[idx])
}

关键思想是@Html.TextBox("Foo", Model.Rate[idx]),在引用速率列表项时必须使用索引器。这样,当您回发时,MVC 模型绑定器将能够获取列表项,包括对这些项的任何更改。

至于拾取用户添加的新项目,我不确定。也许另一个 SO 用户可以提供帮助?但希望我的回答有所帮助。

于 2013-09-30T15:51:39.920 回答