繁体   English   中英

MVC4如何从视图传递模型属性列表到操作

[英]MVC4 How to Pass a model propery list to Action from view

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

    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操作,但是列表为null。 填充所有其他值。

有任何想法吗? 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>

问题出在你的foreach循环上。 您应该将其更改为for循环,并且绑定应该正确运行。

检查以下类似的问题和答案:

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

MVC剃刀@foreach

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM