所以我使用显示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();
}
}
}
答案 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)