MVC c#绑定不起作用,因为在我的视图中for循环中有一个for循环

时间:2016-11-11 06:55:26

标签: c# asp.net-mvc entity-framework

我是MVC的新手(您很快就能从我的代码中了解到)。 我的问题是绑定没有按照我的希望工作,因为在for循环中有一个for循环,我不知道如何让它工作。

我有一个页面显示OVERALL对象,所有与OVERALL关联的ASSET,然后是与每个ASSET关联的所有PORT。用户也可以编辑其中的一些字段。即它是一个VIEW中的索引和编辑。

我在我的httpget索引控制器中成功填充了名为OVERALL的模型。 我通过我的视图在屏幕上显示数据,它的工作原理。

但是当我点击我的'验证'按钮进入我的httpost索引控制器时,我的pList只包含与aList中第一个条目相关的5个条目,而不是所有20个条目(每个ASSET有5个PORTS,有4个资产总额(OVERALL)。 oList和aList具有正确的值。

我的控制器:

[HttpPost]
 public ActionResult Index(OVERALL oList, IList<ASSET> aList, IList<PORT> pList)

我认为这是因为绑定不起作用,因为在我的视图中for循环中存在for循环,这会使绑定的名称/ id混淆,但我不知道如何解决它。

我应该为端口列表中的每个项目指定输入名称吗?

我应该完全重写这个,因为我做错了。我的最终目标是将我的OVERALL对象(包括连接的集合)中的所有数据传递给我的httppost索引控制器?

以下是我的一些观点:

@model Models.OVERALL

<div>
    <hr />
    <dl class="dl-horizontal">
        @Html.HiddenFor(model => model.OVERALLID)
        <dt>
            @Html.DisplayNameFor(model => model.EMAIL_SEND_DATE)
        </dt>
        <dd>
            @Html.HiddenFor(model => model.EMAIL_SEND_DATE)
            @Html.DisplayFor(model => model.EMAIL_SEND_DATE)
        </dd>
        <dt>
            @Html.DisplayNameFor(model => model.SENDER_ID)
        </dt>
        <dd>
            @Html.HiddenFor(model => model.SENDER_ID)
            @Html.DisplayFor(model => model.SENDER_ID)
        </dd>
        @Html.HiddenFor(model => model.ASSET)
        <dd>
            <table class="table">
                @for (int i = 0; i < Model.ASSET.Count(); i++)
                {
                    @Html.HiddenFor(x => x.ASSET.ToList()[i].OVERALLID)
                    <tr>
                        <td>
                            @Html.HiddenFor(x => x.ASSET.ToList()[i].ASSETID)
                            @Html.DisplayFor(x => x.ASSET.ToList()[i].ASSETID)
                        </td>
                        <td>
                            @Html.HiddenFor(x => x.ASSET.ToList()[i].ASSET_CLASS)
                            @Html.DisplayFor(x => x.ASSET.ToList()[i].ASSET_CLASS)
                        </td>
                        <td>
                            @Html.EditorFor(x => x.ASSET.ToList()[i].NEW_FUNDS_TO_BE_INVESTED)
                        </td>
                    </tr>
                    @Html.HiddenFor(x => x.ASSET.ToList()[i].PORT)
                    for (int j = 0; j < Model.ASSET.ToList()[i].PORT.Count(); j++)
                    {
                        <tr>
                            @Html.HiddenFor(y => y.ASSET.ToList()[i].PORT.ToList()[j].ASSETID)
                            <td>
                                @Html.HiddenFor(y => y.ASSET.ToList()[i].PORT.ToList()[j].PORTID)
                                @Html.DisplayFor(y => y.ASSET.ToList()[i].PORT.ToList()[j].PORTID)
                            </td>
                            <td>
                                @Html.HiddenFor(y => y.ASSET.ToList()[i].PORT.ToList()[j].PORTFOLIO)
                                @Html.DisplayFor(y => y.ASSET.ToList()[i].PORT.ToList()[j].PORTFOLIO)
                            </td>
                            <td>
                                @Html.EditorFor(y => y.ASSET.ToList()[i].PORT.ToList()[j].NEW_TARGET)
                            </td>
                        </tr>
                    }
                }
            </table>
        </dd>
    </dl>
</div>

这是我的类(首先使用EF数据库自动构建): 每个OVERALL都有很多ASSET,每个ASSET都有很多PORT。

public partial class OVERALL
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public OVERALL()
    {
        this.ASSET = new HashSet<ASSET>();
    }

    public decimal OVERALLID { get; set; }
    public DateTime? EMAIL_SEND_DATE { get; set; }
    public string SENDER_ID { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<ASSET> ASSET { get; set; }
}

 public partial class ASSET
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public ASSET()
    {
        PORT = new HashSet<PORT>();
    }

    public decimal ASSETID { get; set; }
    public string ASSET_CLASS { get; set; }
    public decimal? NEW_FUNDS_TO_BE_INVESTED { get; set; }
    public decimal OVERALLID { get; set; }

    public virtual OVERALL OVERALL { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<PORT> PORT { get; set; }
}   

 public partial class PORT
{
    public decimal PORTID { get; set; }
    public string PORTFOLIO { get; set; }
    public Nullable<decimal> NEW_TARGET { get; set; }
    public decimal ASSETID { get; set; }

    public virtual ASSET ASSET { get; set; }
}   

0 个答案:

没有答案