2

哎哟!

我正在使用绑定到 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 控件会导致发生指定的 OnUpdating 事件,但不会发生指定的 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>

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

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

不会抛出异常。该页面刚刚回发,仍然显示 EditItemTemplate 控件。我可以在所有地方设置断点,但线索会在 Things_Updating 结束时停止。似乎发生了一些异常,调试器没有处理或捕获。有没有办法打开引擎盖,看看 ASP.NET 正在做什么(或没有做什么)?

提前致谢!

4

2 回答 2

2

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

编辑:

尝试在处理程序中添加参数GridView.RowUpdating而不是ObjectDataSource.Updating. 这就是我通常的做法。我认为您需要在' 事件DataSourceView中修改更新参数。ObjectDataSource(请参阅:ObjectDataSource Gridview Insert Fails W/ Empty Values Dictionary

protected void gridThings_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    e.NewValues.Add("thing", _theThing);
}
于 2011-12-19T21:00:12.500 回答
1

想到两件事可能会导致进度停在那里:

  1. 您也处理了 heGridView.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;
    }
    

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

于 2011-12-20T14:39:09.167 回答