此問題適用於ASP.NET專家。它使我瘋狂。在ASP.NET中的代碼隱藏中訪問usercontrols
我已經繼承了ASP.NET Web窗體應用程序。此應用程序使用嵌套用戶控件的複雜 結構。雖然複雜,但在這種情況下似乎是必要的。無論如何,我有一個使用單個UserControl的頁面。我們將調用此UserControl 根控件。該用戶控件定義如下:
widget.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="widget.ascx.cs" Inherits="resources_userControls_widget" %>
<div>
<asp:Panel ID="bodyPanel" runat="server" />
</div>
widget.ascx.cs
public partial class resources_userControls_widget : System.Web.UI.UserControl
{
private string source = string.Empty;
public string Source
{
get { return source; }
set { source = value; }
}
private string parameter1 = string.Empty;
public string Parameter1
{
get { return parameter1; }
set { parameter1 = value; }
}
private DataTable records = new DataTable();
public DataTable Records
{
get { return records; }
set { records = value; }
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
UserControl userControl = LoadControl(source) as UserControl;
if (parameter1.Length > 0)
userControl.Attributes.Add("parameter1", parameter1);
bodyPanel.Controls.Add(userControl);
}
private void InsertUserControl(string filename)
{
}
}
在我的申請,我在下面使用widget.ascx way: page.aspx
<uc:Widget ID="myWidget" runat="server" Source="/userControls/widgets/info.ascx" />
個
page.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
DataTable table = GetData();
myWidget.Records = table;
}
請注意info.ascx是如何設置的,因爲我們希望在這種情況下加載的用戶控件。在這種情況下,這種方法是必要的。我刪除了無用的代碼,證明它專注於這個問題。無論如何,在info.ascx.cs我有以下幾點:
info.ascx.cs
protected void Page_Load(object sender, EventArgs e)
{
// Here's the problem
// this.Parent.Parent is a widget.ascx instance.
// However, I cannot access the Widget class. I want to be able to do this
// Widget widget = (Widget)(this.Parent.Parent);
// DataTable table = widget.Records;
}
我真的需要得到來自母公司的用戶控制的「記錄」屬性的值。不幸的是,我似乎無法從我的代碼隱藏中訪問Widget類。在編譯時有沒有關於UserControl可見性的規則,我不知道?如何從info.ascx.cs的代碼隱藏中訪問Widget類?
謝謝!
只是好奇,是什麼this.Parent.Parent.ToString()報告是什麼? – Sabre
Parent.Parent.ToString()顯示我試圖獲得的類的名稱(Widget)。這一切都是如此古怪。在運行時,我可以看到類名稱很好。但是,在開發/編譯期間,Widget在IntelliSense中不可用。如果我只是使用它,不考慮智能感知,編譯失敗。 –