0

所以我有一个与之关联的更新和删除方法的 ObjectDataSource,并且 DS 连接到一个网格视图。当我调用这些方法时,我想在主页面中重新填充一个下拉列表,其中包含与网格相同的数据,所以我尝试按如下方式调用这些方法:

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

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

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

谢谢

4

2 回答 2

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;
于 2012-04-20T16:59:25.453 回答
0

您需要添加 Master 指令:

<%@ MasterType TypeName ="MasterPageClassName" %>

或者

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

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

Update: Separated TypeName and virtualpath as pointed out in the comments.

于 2012-04-20T17:05:30.173 回答