Page_OnLoad事件里取不到用户控件的属性,点解?

bzscs 2006-01-18 05:15:47
aspx和用户控件(用于登录用户验证的控件)都是用vs编的,后台代码的形式

在webform1.aspx.cs文件的Page_Load里,Label1.Text = Convert.ToString(LoginChk1.UserId);,但执行结果是Label1显示为空,取不到LoginChk1.UserId

但是,如果在webform1另加一个按钮,在按钮点击事件里:Label1.Text = Convert.ToString(LoginChk1.UserId);,则点击按钮后可以显示出这个属性的值;

或者,直接在webform1.aspx文件里加<% Label1.Text = Convert.ToString(LoginChk1.UserId); %>,也可以显示

Why?
...全文
221 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzscs 2006-02-14
  • 打赏
  • 举报
回复
我知了,其实身份验证不用做成用户控件的形式,做一个类算了,回避这个问题
bzscs 2006-01-21
  • 打赏
  • 举报
回复
ChkLogin.ascx.cs
-
namespace admin221
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.Security;

public class LoginChk : System.Web.UI.UserControl
{
string _UserName;
int _UserId,_UserOpt;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(HttpContext.Current.User.Identity.Name != "")
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
_UserName = ticket.Name;
string[] UserData = System.Text.RegularExpressions.Regex.Split(ticket.UserData,",");
if(UserData.Length>0)
{
_UserId = Convert.ToInt32(UserData[0]);
_UserOpt = Convert.ToInt16(UserData[1]);
}
else
{
Response.Redirect("login.aspx",true);
}
}
}
public string UserName
{
get{return _UserName;}
}
public int UserId
{
get{return _UserId;}
}
public int UserOpt
{
get{return _UserOpt;}
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
bzscs 2006-01-21
  • 打赏
  • 举报
回复
webform2.aspx
-
<%@ Page language="c#" Codebehind="WebForm2.aspx.cs" AutoEventWireup="false" Inherits="admin221.WebForm2" %>
<%@ Register TagPrefix="uc1" TagName="LoginChk" Src="LoginChk.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD><title>WebForm2</title></HEAD>
<body>
<form id="Form1" method="post" runat="server">
<uc1:LoginChk id="LoginChk1" runat="server"></uc1:LoginChk><BR>
<asp:Label id="Label1" runat="server">Label</asp:Label><BR>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
</form>
</body>
</HTML>
-
webform2.aspx.cs
-
namespace admin221
{
/// <summary>
/// WebForm2 的摘要说明。
/// </summary>
public class WebForm2 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Button Button1;
protected admin221.LoginChk LoginChk1;

private void Page_Load(object sender, System.EventArgs e)
{
Label1.Text = LoginChk1.UserName;
// 在此处放置用户代码以初始化页面
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
Label1.Text = LoginChk1.UserName;
}
}
}
xiaoyan21 2006-01-21
  • 打赏
  • 举报
回复
"但是,如果在webform1另加一个按钮,在按钮点击事件里:Label1.Text = Convert.ToString(LoginChk1.UserId);,则点击按钮后可以显示出这个属性的值;"

----------------------------------------------------------------

显击按钮可以得到值???

我怎么不行?
  • 打赏
  • 举报
回复
不过页面的page_load里边通常什么也不用做,在这个事件发生之前已经装载好用户控件并且已经有了值。你的描述并不能说明Label1.Text为什么是空的,你还是提供多一些代码比较好。
  • 打赏
  • 举报
回复
不知道你的LoginChk1是怎么跑到页面上的。以及UserId是何时有值的。你的叙述太简单,所以不知道你的问题的原因。

要注意,基本上,页面的page_load首先被触发,然后才递归触发各个控件的page_load。
bzscs 2006-01-18
  • 打赏
  • 举报
回复
bzscs 2006-01-18
  • 打赏
  • 举报
回复
在用户控件初始化之后,有没有一个事件被自动触发呢?
我是丁学 2006-01-18
  • 打赏
  • 举报
回复
有个时间顺序的关系,Page_Load是比较早执行的,在这个事件执行时,页面上其他控件都还没有被初始化,所以当然取不到LoginChk1.UserId的值
而你点按钮是在页面初始化完了之后才点的,此时控件也初始化完毕了
就是这个道理了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧