调试网格视图/对象数据源事件

本文关键字:数据源 事件 对象 网格 视图 调试 | 更新日期: 2023-09-27 18:18:32

啊!

我正在使用绑定到 ObjectDataSource 的 ASP.NET GridView 控件:

<asp:ObjectDataSource ID="Things" runat="server"
    TypeName="BLL.Thing"
    UpdateMethod="UpdateThing"
    OnUpdating="Things_Updating"
    OnUpdated="Things_Updated">
    <UpdateParameters>
        <asp:SessionParameter
            Name="userContext"
            SessionField="UserContext"
            Type="Object" />
        <asp:Parameter Name="thing" Type="Object" />
    </UpdateParameters>
</asp:ObjectDataSource>

单击带有 CommandName="Update" 的 ImageButton 控件会导致发生指定的 OnUpdate 事件,但不会发生指定的 UpdateMethod 或 OnUpdated 事件。

<EditItemTemplate>
    <asp:ImageButton ID="ImageButton_Save" runat="server"
        CommandName="Update"
        SkinID="Save"
        CausesValidation="false"
        CommandArgument='<%# Eval("Id") %>' />
    <asp:ImageButton ID="ImageButton_Cancel" runat="server"
        CommandName="Cancel"
        SkinID="Cancel"
        CausesValidation="false" />
</EditItemTemplate>

输入参数在 OnUpdate 事件中定义,如下所示:

protected void Things_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
    e.InputParameters["thing"] = _theThing;
}

不会引发任何异常。该页面只是回发,其中 EditItemTemplate 控件仍然显示。我可以到处放置断点,但小径在Things_Updating结束时停止。似乎发生了一些未由调试器处理或捕获的异常。有没有办法打开引擎盖,看看 ASP.NET 在做什么(或没做什么(?

提前感谢!

调试网格视图/对象数据源事件

BLL.Thing.UpdateThing()执行吗? 这应该在Things.Updating之后发生,并且易于调试。 此外,如果有什么东西导致异常,那可能就是它。

编辑:

尝试在处理程序中添加参数以进行GridView.RowUpdating而不是ObjectDataSource.Updating。 我通常就是这样做的。 我认为您需要DataSourceView来修改ObjectDataSource事件中的更新参数。 (请参阅:对象数据源网格视图插入失败,带空值字典(

protected void gridThings_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    e.NewValues.Add("thing", _theThing);
}

我想到了两件事,可能会导致进度就此停止:

  1. 你也处理了他GridView.RowUpdating事件,并将 GridViewUpdateEventArgs.Cancel 属性设置为 true。 像这样:

    protected void myGridView_RowUpdating(Object sender, GridViewUpdateEventArgs e)
    {
        e.Cancel = true;
    }
    
  2. 您在 ObjectDataSource.Updating 事件中执行了类似操作,将 ObjectDataSourceMethodEventArgs.Cancel 属性设置为 false。 喜欢这个:

    private void myObjectDataSource_Updating(object source, ObjectDataSourceMethodEventArgs e)
    {
        e.Cancel = true;
    }
    

其中任何一个都会停止更新过程,导致类似于您所描述的内容。