提交IEnumerable <t> </t>时,主键设置为零

时间:2012-02-17 15:08:29

标签: asp.net-mvc-3 ienumerable

所以我使用显示here的代码创建了一个可变长度列表。

当我提交表单时,主键被重置为0.在HTML表单中,它们不是零而是实际值。我该如何解决这个问题?

表格

@using (Html.BeginCollectionItem("Kortingartikel")) { 

    @Html.HiddenFor(x => x.Artikelid)
    @Html.TextBoxFor(x => x.Artikelnaam)
    @Html.TextBoxFor(x => x.Prijs)</td>

}

数据

根据Chrome,此数据会发送到服务器:

Kortingartikel.index:ad56efb0-ab7f-4b37-9d9b-712d7c3e3543
Kortingartikel[ad56efb0-ab7f-4b37-9d9b-712d7c3e3543].Artikelid:5
Kortingartikel[ad56efb0-ab7f-4b37-9d9b-712d7c3e3543].Artikelnaam:test artikel een
Kortingartikel[ad56efb0-ab7f-4b37-9d9b-712d7c3e3543].Prijs:10,00
Kortingartikel.index:b9624d8f-38e6-4092-ba1b-d004d0443a43
Kortingartikel[b9624d8f-38e6-4092-ba1b-d004d0443a43].Artikelid:6
Kortingartikel[b9624d8f-38e6-4092-ba1b-d004d0443a43].Artikelnaam:test artikel twee
Kortingartikel[b9624d8f-38e6-4092-ba1b-d004d0443a43].Prijs:5,00

行动

将数据发送到以下操作:

public ActionResult Kortingartikel(IEnumerable<Kortingartikel> Kortingartikel)

'Kortingartikel'参数具有以下值:

[0]Artikelnaam:test artikel een
   Prijs: 10
   Artikelid: 0
[1]Artikelnaam:test artikel twee
   Prijs: 5
   Artikelid: 0

属性/字段Artikelid Artikelid是从linq-to-sql dbml文件生成的。这是(自动生成的)代码:

[global::System.Data.Linq.Mapping.ColumnAttribute(Name="artikelid", Storage="_artikelid", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
    public long Artikelid
    {
        get
        {
            return this._artikelid;
        }
                    set
        {
            if ((this._artikelid != value))
            {
                this.OnArtikelidChanging(value);
                this.SendPropertyChanging();
                this._artikelid = value;
                this.SendPropertyChanged("Artikelid");
                this.OnArtikelidChanged();
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

我怀疑Artikelid视图模型上的Kortingartikel没有设置器:

public int Artikelid { get; } // Bad

或者它不公开:

protected int Artikelid { get; set; } // Bad

或者它根本不是属性,但它是一个字段:

public int Artikelid; // Bad

在所有这些情况下,默认模型绑定器无法从请求中设置其值。因此,请确保在视图模型上使用public getter和setter声明此属性:

public int Artikelid { get; set; } // Good

另外,为了避免可能的冲突,请尝试重命名您的操作参数:

public ActionResult Kortingartikel(IEnumerable<Kortingartikel> model)