Этот вопрос для гуру ASP.NET.Это сводит меня с ума.
Я унаследовал приложение ASP.NET Web Forms.Это приложение использует сложную структуру вложенных пользовательских элементов управления.Хотя это и сложно, в этом случае кажется необходимым.Несмотря на это, у меня есть страница, которая использует один UserControl.Мы назовем этот элемент управления UserControl root.Этот 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 следующим образом: 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 установлен как UserControl, который мы хотим загрузить в этом случае.Этот подход необходим в этом случае.Я удалил посторонний код, который оправдывает его, чтобы сосредоточиться на проблеме.Несмотря на это, в 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;
}
Мне действительно нужно получить значение "Записиmsgstr "свойство из родительского элемента управления.К сожалению, я не могу получить доступ к классу Widget из моего кода.Есть ли какие-то правила о видимости UserControl во время компиляции, о которых я не знаю?Как получить доступ к классу Widget из кода info.ascx.cs?
Спасибо!