假设我有一个ASCX用户控件,需要访问当前用户的完整名称。一个ASPX页面在顶部包含以下行:
<%@ Register src="top.ascx" tagprefix="custom" tagname="top" %>
and this line in the body:
<custom:top runat="server" />
ASPX文件知道当前用户的用户ID,并可以确定他的全名。那么我如何使用由ASPX文件运行的代码将其信息提供给ASCX文件?
假设我有一个ASCX用户控件,需要访问当前用户的完整名称。一个ASPX页面在顶部包含以下行:
<%@ Register src="top.ascx" tagprefix="custom" tagname="top" %>
and this line in the body:
<custom:top runat="server" />
public string FullName { get; set; }
YourUserControl.FullName = FullName
或通过标记
<custom:top runat="server" FullName="<%= SomeProperty %>" />
Page
属性并将其转换为页面实例。然后,调用页面类的方法以获取用户名。Session["UserFullName"] = GetFullName(); //Code to get full name here
在 ASMX 中:
this.FullName = Session["UserFullName"]; //TODO: Check for null values
这听起来你可能对页面生命周期的工作方式以及如何在控件之间共享数据有所误解。例如,假设您在ASPX中有以下代码:
public override void OnLoad(EventArgs e)
{
string userName = "Bob";
}
<custom:top ID="someControl" runat="server" />
您可以像这样在您的top
控件中公开一个属性:
public string UserName { get; set; }
然后您可以将此代码添加到您的OnLoad
方法中:
someControl.UserName = userName;
那么你的控件将可以访问这些数据。或者,如果你没有直接联系到控件,你可以将东西放入请求缓存中:
HttpContext.Current.Items["key"] = userName;
然后通过相同的方式从您的控件中提取数据:
string fromCache = HttpContext.Current.Items["key"];