ASP.NET ASCX使用实例变量

时间:2012-04-16 15:19:09

标签: asp.net instance-variables ascx

假设我有一个ASCX用户控件,需要访问当前用户的全名。 ASPX页面顶部包含此行

<%@ Register src="top.ascx" tagprefix="custom" tagname="top" %>

和身体中的这一行:

<custom:top runat="server" />

ASPX文件知道当前用户的用户ID,并可以确定他的全名。那么如何使用ASPX文件运行的代码将其信息提供给ASCX文件?

4 个答案:

答案 0 :(得分:6)

在UserControl上声明一个属性并设置父页面。

在您的usercontrol上:

public string FullName { get; set; }

在aspx页面上,将其设置在

后面的代码中
YourUserControl.FullName = FullName

或通过标记

<custom:top runat="server" FullName="<%= SomeProperty %>" />

答案 1 :(得分:4)

您可以使用用户控件的Page property并将其强制转换为您的网页实例。然后,调用页面类的方法来获取用户名。

要在动态编译的项目中完成此工作,您必须做一些工作才能让控件识别动态编译页面的数据类型。 Here is a short tutorial on how to do

或者,如Brandon outlines所示,执行相反的操作,让您的页面告诉您的用户控制信息。

答案 2 :(得分:0)

这听起来好像您可能会错误地了解页面生命周期的工作原理以及如何在控件中公开数据。例如,假设您在ASPX中有此代码:

  public override void OnLoad(EventArgs e)
  {
       string userName = "Bob";
  }

在ASPX文件中,您可以引用控件并在其上设置属性以传递数据:

  <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"];

答案 3 :(得分:0)

你可以通过几种方式解决这个问题。我通常使用会话变量,因为用户将被绑定到会话。

在ASPX中(或用户登录时):

Session["UserFullName"] = GetFullName(); //Code to get full name here

在ASMX中:

this.FullName = Session["UserFullName"]; //TODO: Check for null values