所以我有ObjectDataSource,它有一个与之关联的更新和删除方法,DS被连接到gridview。当我调用这些方法时,我想重新填充Master页面中包含与网格相同数据的下拉列表,所以我试着按如下方式调用这些方法:
MyApp MasterPage = (MyApp)Page.Master;
MasterPage.getData();
现在,如果我从网格进行插入(由RowCommand事件而不是DS处理),这可以正常工作,但通过DS我得到以下错误:“对象引用未设置为实例一个对象。“
我可以看到aspx上的某些字段还没有从回发中获得,但是如何使母版页不可用于依赖它的页面?我不应该参考它吗?这有什么后门伎俩吗?我知道我可以摆脱DS,但我想使用它,因为它使分页和排序变得如此简单。
由于
答案 0 :(得分: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;
答案 1 :(得分:0)
您需要添加Master指令:
<%@ MasterType TypeName ="MasterPageClassName" %>
或
<%@ MasterType virtualpath="~/Masters/Master1.master" %>
http://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx
更新:评论中指出的分隔的TypeName和虚拟路径。