ASP.NET模型绑定:UpdateMethod没有接收数据密钥

时间:2016-10-07 20:22:44

标签: asp.net gridview model-binding

我正在使用模型绑定对一个带有单个int主键的表进行GridView。

<asp:GridView ID="gvTimesheet" runat="server" AutoGenerateColumns="false"
        ItemType="BO.TimeSheet" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true"
        DataKeyNames="TimeSheetID"
        SelectMethod="gvTimesheet_GetData" UpdateMethod="gvTimesheet_UpdateItem"
        OnRowDataBound="gvTimesheet_RowDataBound">
<Columns>
... // Note: TimeSheetID is NOT one of the columns here

SelectMethod工作正常,但UpdateMethod

public void gvTimesheet_UpdateItem(int TimeSheetID) {

始终获取ID的值0。参数的名称与DataKeyNames匹配,DataKeyNames正确匹配键的模型对象的属性。一切看起来都是正确的。

我尝试将密钥添加为不可见的BoundField,但这并没有任何区别,所以我删除了它。它应该足够在DataKeyNames中。

(RowDataBound处理程序只为一些其他字段填充了几个DropDownLists / ComboBox,并且没有使用密钥ID做任何事情。)

什么会导致键值无法显示在UpdateMethod中?

1 个答案:

答案 0 :(得分:0)

我解决了,这是一个基本的错误。我的SelectMethod获取了一个带有主键值的DataTable,但它没有填充业务对象BO.TimeSheet.TimeSheetID的属性。因此模型对象只保留默认的0值。

我想当我编写gvTimesheet_GetData()方法时,我的印象是我只需要填充我知道我想要编辑的字段;那显然不是这样。