Первичный ключ устанавливается в ноль при отправке IEnumerable <T> - PullRequest
0 голосов
/ 17 февраля 2012

Итак, я создал список переменной длины, используя код, показанный здесь .

Когда я отправляю форму, первичные ключи сбрасываются в 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)

The KortingartikelПараметр имеет следующие значения:

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

Свойство / поле Artikelid Artikelid создается из файла dqml linq-to-sql.Вот (автоматически сгенерированный) код:

[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 Ответ

2 голосов
/ 17 февраля 2012

Я подозреваю, что Artikelid на вашей Kortingartikel модели просмотра также не имеет установщика:

public int Artikelid { get; } // Bad

или это не публично:

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

или это вообще не свойство, а поле:

public int Artikelid; // Bad

Во всех этих случаях связыватель модели по умолчанию не сможет установить свое значение из запроса. Поэтому убедитесь, что это свойство объявлено с общедоступными методами получения и установки в вашей модели представления:

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

Также, чтобы избежать возможных конфликтов, попробуйте переименовать параметр действия:

public ActionResult Kortingartikel(IEnumerable<Kortingartikel> model)
...