我正在使用模型绑定对一个带有单个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中?
答案 0 :(得分:0)
我解决了,这是一个基本的错误。我的SelectMethod获取了一个带有主键值的DataTable,但它没有填充业务对象BO.TimeSheet.TimeSheetID
的属性。因此模型对象只保留默认的0值。
我想当我编写gvTimesheet_GetData()方法时,我的印象是我只需要填充我知道我想要编辑的字段;那显然不是这样。