2012-04-20 38 views
0

所以我有ObjectDataSource有一个更新和删除方法与它关联,并且DS被连接到一个gridview。当我调用的方法,我想重新填充在包含相同的数据网格中的母版页下拉,所以我试图调用方法如下:现在ObjectDataSource方法不能引用母版页方法

  MyApp MasterPage = (MyApp)Page.Master; 
      MasterPage.getData(); 

,如果我做一个插入从网格(这是由RowCommand事件处理,而不是DS),这工作得很好,但通过DS我得到以下错误:“对象引用未设置为对象的实例。”

我可以看到aspx中的某些字段尚未从回发中获得,但是母版页如何不可用于依赖它的页面?我不应该参考它吗?有没有一些后门技巧呢?我知道我可以摆脱DS,但我想使用它,因为它使分页和排序变得如此简单。

感谢

+0

您是否在'MasterPage.getData()'之前放置了一个断点来验证MasterPage为空?如果你这样做,并发现它不是null,你可以进入'getData()',看看是否有空引用。 – mafue 2012-04-20 16:33:50

+0

是的,masterPage为null – Limey 2012-04-20 16:35:36

+0

当我深入研究这个问题时,它调用了方法,但是由于该方法引用了一个下拉框(它现在还不存在),所以它已经解决了。 – Limey 2012-04-20 16:54:36

回答

1

检查在masterpage-contentpage life-cycle事件的顺序。您可能可以将代码移至主页面访问下拉框后触发的事件。


编辑:替代

如果您不能移动代码,尝试将数据存储在母版页的属性,那么,一旦下拉已经初始化,回到掌握页面并获取数据。

protected object SomePropertyICreatedToStoreData {get;set;} 

void GetData() 
{ 
    // get the data (this part works already) 
    var theData = WhereTheDataComesFrom 

    // bind to dropdownlist - doesn't work, so... 
    this.SomePropertyICreatedToStoreData = theData; 
} 

...再后来

 this.MyDropDownList.DataSource = this.SomePropertyICreatedToStoreData; 
+0

是的,我可以移动到rowCommand,但是然后ObjectDataSource会冒犯,而且我真的很讨厌必须编写所有的代码才能很好地处理我。 – Limey 2012-04-20 17:26:17

+0

@Limey,我刚刚添加的替代方案可能会起作用。如果没有,也许你可以更新显示你有和没有工作的事件顺序的问题。 – mafue 2012-04-20 19:31:52

+0

它不是数据是问题,它将数据添加到对象。该方法可以很好地回调数据集,但是当我尝试将该数据绑定到母版页中存在的下拉列表时,它尚未初始化。 – Limey 2012-04-20 19:35:53

0

您需要添加的主指令:

<%@ MasterType TypeName ="MasterPageClassName" %> 

<%@ MasterType virtualpath="~/Masters/Master1.master" %> 

http://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx

更新:注释中指出的分离的TypeName和虚拟路径。

+0

同样的问题。似乎只是一个不同的方式来做同样的行动,我已经在上面。 – Limey 2012-04-20 17:25:10

+0

我很确定你需要参考。试试:<%@ MasterType TypeName =“MasterPageClassName”%> – Ulises 2012-04-20 18:16:41

+0

与以前相同的问题。你可以有TypeName或者虚拟路径,它不会让你拥有两者。 – Limey 2012-04-20 18:44:48