代码之家  ›  专栏  ›  技术社区  ›  LoveMeSomeCode

objectdatasource启动两次,或自行启动

  •  3
  • LoveMeSomeCode  · 技术社区  · 14 年前

    有人能确切地解释一下objectdatasource是如何/何时触发的吗?我有一个asp.net页面,带有gridview,它引用的是ods。我在ods正在使用的方法中设置了一个断点,注意到它已经触发了两次。

    我查了一下密码,一开始答案似乎很明显。我有

        Page_Load()
        {
          if(!Page.IsPostBack)
          {
              MethodA();
              MethodB();
          }
        }
    

    其中methoda和methodb最终都调用gv.databind()。这是有意义的,因为我假设对gridview.databind()的每次调用都会导致向ODS请求数据,从而运行我的数据访问方法。

    奇怪的是,当对methoda的调用进行注释时, 仍然开火两次 . 检查调用堆栈会显示方法首先作为methodb的结果运行,然后再次运行,除了[external code]之外没有跟踪。这个神秘的负载 当我让methoda和methodb都执行时发生。

    知道这里发生了什么吗?你知道我还有什么代码在向ODS索取数据吗?我开始认为所有这些“无代码”数据控件都比它们的价值更为模糊和模糊。

    6 回复  |  直到 8 年前
        1
  •  3
  •   Homer    14 年前

    在代码中动态隐藏/显示gridview列时,我遇到过这个问题。

    下面是一个页面,讨论一些可能导致多次选择的问题 http://forums.asp.net/t/1161164.aspx

        2
  •  1
  •   Scott Software    8 年前

    如果要更改与对象数据源绑定的GridView的可见性(即显示和/或隐藏GridView的列),则可以隐式多次调用GridView的数据绑定方法。

    在这种情况下,请尝试将show/hide gridview列代码封装在page-loadcomplete事件处理程序中。

    页面加载完成事件处理程序在页面生命周期中处于主要位置,以防止多个数据绑定调用,并且在GridView数据绑定事件之前的控件更改事件(例如,按钮单击、下拉所选索引更改等)之后调用它时仍然有效。

        3
  •  0
  •   Tomas Voracek    14 年前

    “当注释掉对methoda的调用时,它仍然会触发两次”。所以可能会调用两次页面加载。可能您有autoeventwireup=“true”,也可以在代码中注册事件 http://www.aspdeveloper.net/tiki-index.php?page=ASPFaqEventsDoubleFire

        4
  •  0
  •   mikek3332002    14 年前

    如果将gridview的数据源设置为

    gv.DataSourceID=dsObjDataSource;
    

    然后网格视图调用 gv.DataBind() 独自一人。

        5
  •  0
  •   Adam Rackis    13 年前

    我有同样的问题-问题是我在数据绑定之后或期间隐藏/显示了一个列。移动隐藏/显示代码 之前 数据绑定阻止绑定发生两次,我怀疑这与将绑定移动到页面加载的效果相同。在我的例子中,数据绑定是响应下拉列表框的更改而发生的—在 DataBind() 电话帮我解决了两人的问题。

        6
  •  0
  •   Sergey Glotov Nitesh Khosla    12 年前

    我在两次使用 asp:DataList asp:ObjectDataSource .

    结果是因为我在select参数中使用了一个usercontrol:

    <asp:ControlParameter Name="GroupID" Type="Int32" DefaultValue="-1"
        ControlID="UserControl1" PropertyName="SelectedGroupID" />
    

    我厌倦了用户控件。我可以看到他们如何提高五年级学生的生产力,但在更高的水平上,这完全是浪费时间。