2011-12-19 65 views
2

Ahoy!调试GridView/ObjectDataSource事件

我使用绑定到一个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 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正在做什么(或没有做)?

在此先感谢!

回答

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); 
} 
+0

不,小道神秘地在Things_Updating后结束: -/ – Adam 2011-12-19 21:04:56

+0

@Adam:答复已更新。 – pseudocoder 2011-12-19 22:06:06

+0

我不认为GridView类有一个OnUpdating事件,但它确实有一个我将用来代替的RowCommand事件。谢谢! – Adam 2011-12-20 20:06:04

1

两件事情浮现在脑海中,可能导致进度,停在那儿:

  1. 处理完他GridView.RowUpdating事件为好,并设置GridViewUpdateEventArgs.Cancel属性真正。事情是这样的:

    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; 
    } 
    

任何一项都将停止更新过程,从而导致像你描述。

+0

谢谢,伙伴。我有条件逻辑在某些情况下将e.Cancel设置为true,但它们没有被击中。我将放弃这种方法,而是在RowCommand事件中使用我自己的方法。 – Adam 2011-12-20 20:04:35

+0

@亚当好拍!祝你好运=) – jadarnel27 2011-12-20 20:06:29