【问题标题】:ASP.NET model binding: UpdateMethod not receiving data keyASP.NET 模型绑定:UpdateMethod 未接收数据密钥
【发布时间】:2016-10-07 20:22:43
【问题描述】:

我正在针对具有单个 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 匹配,后者与键的模型对象的属性正确匹配。一切看起来都正确。

我尝试将密钥添加为不可见的 BoundField,但这没有任何区别,因此我将其删除。它在 DataKeyNames 中就足够了。

(RowDataBound 处理程序只是为一些其他字段填充了几个 DropDownLists/ComboBoxes,不使用键 ID 做任何事情。)

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

【问题讨论】:

    标签: asp.net gridview model-binding


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多