我有一个母版页,用于设置我想在整个网站上使用的一些变量。
protected void Page_Load(object sender, EventArgs e)
{
//Get users name from AD
str_DomainName = HttpContext.Current.User.Identity.Name;
str_CurrentLogin = str_DomainName.Substring(5);
//Display current user information
DirectorySearcher search = new DirectorySearcher("LDAP://DCHS");
search.Filter = String.Format("(SAMAccountName={0})", str_CurrentLogin);
SearchResult result = search.FindOne();
DirectoryEntry entry = result.GetDirectoryEntry();
lbl_CurrentUser.Text = result.Properties["givenName"][0].ToString() + ' ' + result.Properties["sn"][0].ToString();
// Get SID
IntPtr logonToken = WindowsIdentity.GetCurrent().Token;
WindowsIdentity windowsId = new WindowsIdentity(logonToken);
//Set session variabls
this.CurrentFirstName = result.Properties["givenName"][0].ToString();
//this.CurrentEmail = result.Properties["mail"][0].ToString();
//this.CurrentSID = windowsId.User.ToString();
//this.CurrentUserName = str_CurrentLogin;
//this.CurrentFullName = lbl_CurrentUser.Text;
//this.CurrentDomain = str_DomainName;
this.Session.Add("currentEmail", result.Properties["mail"][0].ToString());
}
public String CurrentFirstName
{
get { return (String)ViewState["currentFirstName"]; }
set { ViewState["currentFirstName"] = value; }
}
然后我在我的defalut.aspx页面中调用它们,如下所示:
protected void Page_PreRender(object sender, EventArgs e)
{
//try
//{
lbl_FullName.Text = Master.CurrentFullName;
lbl_SID.Text = Master.CurrentSID;
testLabel.Text = Master.CurrentEmail;
//}
//catch (Exception ex)
//{ }
}
这很好..如果我离开默认页面,那么我得到以下错误..
对象引用未设置为对象的实例。
一条lbl_FullName.Text = Master.CurrentFullName;
行
如果我取消对try catch的注释,那么它可以正常工作,但我不相信这是避免错误的正确方法。
我只是ASP的新手,所以要好..
编辑:
变量在Master.cs中设置如下。
public String CurrentUserName
{
get { return (String)ViewState["currentUserName"]; }
set { ViewState["currentUserName"] = value; }
}
答案 0 :(得分:1)
几个问题:
保护 全球:: System.Web.UI.WebControls.Label lbl_FullName;
在设计说明中,母版页不是“存储变量”的最佳位置。母版页应该只是用于初始化整个网站的页面的公共部分。
如果您需要从用户收集信息并在多个页面中使用它,请使用会话变量。只要用户的浏览器处于打开状态,这就是一种在内存中存储对象的方法。
可以按如下方式将项目添加到会话中:
this.Session.Add("fullName", fullName);
以后可以从您网站中的任何其他页面/用户控件中检索项目,如下所示:
string fullName = (string)this.Session["fullName"];
答案 1 :(得分:0)
ViewState
是每页。当您导航到新页面时,它未设置。
您的母版页应将这些内容放入Session
。