asp.net - 如何从母版页上的用户控件访问母版页中定义的数据集?
问题描述
我有一个母版页,其中包含在 VB 代码中定义的数据集。
Public Property Inventory As DataSet = New DataSet
我将数据填充到Page_Init
.
我在同一个母版页上有一个用户控件。如何从后面的用户控件代码 ( myusercontrol.ascx )访问数据集Page_Load
?我对内容页面上的用户控件执行此操作没有问题,但是当控件位于母版页上时,我无法使其工作。
通常,我只是将其称为Master.Inventory
. 当控件位于内容页面上时,它可以工作,但是当控件位于母版页上时,我该怎么做呢?我试过了Parent.Page.Master.Inventory
,Page.Master.Inventory
甚至只是Inventory
。我得到“未定义库存”或“库存不是...的成员”。
在用户控件中,我只是想做一些类似Dim i As DataSet = [reference goes here]
.
解决方案
首先,在您的母版页中创建一个公共属性。在这种情况下myDataSet
public partial class Site : System.Web.UI.MasterPage
{
public DataTable myDataSet { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
//add some dummy data to the dataset
myDataSet = new DataTable();
myDataSet.Columns.Add("ID", typeof(int));
myDataSet.Columns.Add("COUNTRY", typeof(string));
myDataSet.Rows.Add(0, "Netherlands");
myDataSet.Rows.Add(1, "Japan");
myDataSet.Rows.Add(2, "Country");
}
}
然后在控件的 Page_Load 中对 Master 进行引用,然后您就可以访问该属性。
public partial class WebUserControl1 : System.Web.UI.UserControl
{
public Site master;
protected void Page_Load(object sender, EventArgs e)
{
//get the current master page
master = (Site)Page.Master;
//access the public property in the master
Label1.Text = master.myDataSet.Rows[0][1].ToString();
}
}
VB
我为 VB 使用了代码翻译器,所以它可能不完全正确。但你会明白的。
Public Class Site
Inherits System.Web.UI.MasterPage
Public Property myDataSet As DataTable
Get
End Get
Set
End Set
End Property
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
'add some dummy data to the dataset
Me.myDataSet = New DataTable
Me.myDataSet.Columns.Add("ID", GetType(System.Int32))
Me.myDataSet.Columns.Add("COUNTRY", GetType(System.String))
Me.myDataSet.Rows.Add(0, "Netherlands")
Me.myDataSet.Rows.Add(1, "Japan")
Me.myDataSet.Rows.Add(2, "Country")
End Sub
End Class
控制
Public Class WebUserControl1
Inherits System.Web.UI.UserControl
Public master As Site
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
'get the current master page
Me.master = CType(Page.Master,Site)
'access the public property in the master
Label1.Text = Me.master.myDataSet.Rows(0)(1).ToString
End Sub
End Class
推荐阅读
- mysql - PHPMyAdmin Designer 不显示所有表格
- angular - 为什么我不能从本地 Angular 应用程序发布到在 docker 上运行的 RestHeart 本地测试 api?
- tsql - 将具有键和注释字段的表转换为列字段中每个单词的键和行
- redis - Redis - 默认快照配置
- go - go 中包含的库的类型不匹配
- python - 比较 %H:%M:%S %b %d %Y 中 python 时间的最佳方法
- android - Recyclerview 不保留我的滚动位置
- lisp - 通过删除不需要的库来沙盒诡计?
- node.js - 如何显示数组中的对象列表
- php - 在查询模型 Laravel 中使用访问器 getAttribute