有人可以准确解释ObjectDataSource是如何/何时触发的?我有一个带有GridView的ASP.NET页面,它引用了ODS。我在ODS正在使用的方法中设置了一个断点,并注意到它发射了两次。
我查看了代码,起初答案似乎很明显。我有
Page_Load()
{
if(!Page.IsPostBack)
{
MethodA();
MethodB();
}
}
其中MethodA和MethodB最终都调用了gv.DataBind()。这是有道理的,因为我假设每次调用GridView.DataBind()都会导致向ODS询问数据,从而运行我的数据访问方法。
奇怪的是,当注释掉对MethodA的调用时,仍然会触发两次。检查调用堆栈显示方法首先作为MethodB的结果运行,然后再次,除了[外部代码]之外没有任何跟踪。当我让MethodA和MethodB都执行时,这个神秘的负载会发生 not 。
知道这里发生了什么吗?知道我可能有什么其他代码,要求ODS提供数据吗?我开始认为所有这些“无代码”的数据控件都比它们的价值更加混淆和BS。
答案 0 :(得分:3)
当我们在代码中动态隐藏/显示gridview列时,我遇到了这个问题。
这是一个页面,讨论可能导致多个选择的一些问题 http://forums.asp.net/t/1161164.aspx
答案 1 :(得分:1)
如果您正在更改可见性(即显示和/或隐藏)与对象数据源关联的网格视图的列,则可以隐式发生对gridview的数据绑定方法的多次调用。
在这种情况下,请尝试在Page_LoadComplete事件处理程序中封装show / hide gridview列代码。
Page_LoadComplete事件处理程序在页面生命周期中处于主要位置,以防止多个数据绑定调用,并且在控制更改事件(例如,按钮单击,下拉选定的索引更改等)之前调用它仍然有效gridview数据绑定事件。
答案 2 :(得分:0)
“当注释掉对Method的调用时,它仍会触发两次”。所以它可能会被调用两次Page_Load。可能你有AutoEventWireup =“true”并且还在代码http://www.aspdeveloper.net/tiki-index.php?page=ASPFaqEventsDoubleFire中注册事件
答案 3 :(得分:0)
如果使用类似
的方式设置gridview的数据源gv.DataSourceID=dsObjDataSource;
然后网格视图自己调用gv.DataBind()
。
答案 4 :(得分:0)
我遇到了同样的问题 - 问题是我在数据绑定之后或期间隐藏/显示了一个列。移动隐藏/显示代码之前数据绑定停止绑定发生两次,我怀疑它与将其移动到Page_Load的效果相同。在我的情况下,数据绑定是为响应下拉列表框更改而发生的 - 在DataBind()
调用之前执行列添加/删除为我修复了twofer问题。
答案 5 :(得分:0)
我使用asp:DataList
和asp:ObjectDataSource
发生了两次DataBinding,结果相同。
原来是因为我在select参数中使用了UserControl:
<asp:ControlParameter Name="GroupID" Type="Int32" DefaultValue="-1"
ControlID="UserControl1" PropertyName="SelectedGroupID" />
我厌倦了UserControls。我可以看到他们如何提高五年级学生的生产力,但他们完全浪费了更高层次的时间。