我有一个ASP.net应用程序,用于显示从我们的ERP系统查询到各种网页的信息。主要对象称为EpicorUser,它基本上封装了有关员工的所有当前信息。
此对象用于填写母版页上的一系列各种字段,如全名,当前活动,时钟输入/输出时间等。
我正在尝试将此对象从MasterPage传递到内容页面,以避免不必要地查询提供此信息的WebService。问题是,当我从ContentPage访问对象时,它始终为null。我知道它已被填充,因为我的MasterPage内容全部填写正确。
我正试图从我的ContentPage访问MasterPage的“CurrentUser”对象,如下所示:
**MasterPage Codebehind:**
public EpicorUser CurrentUser; //This object is populated once user has authenticated
///This is in my ContentPage ASPX file so I can reference the MasterPage from codebehind
<%@ MasterType VirtualPath="~/Pages/MasterPage/ShopConnect.Master" %>
**ContentPage CodeBehind:**
string FullName = Master.CurrentUser.UserFileData.FullName; //CurrentUser is null(but it shouldn't be)
奇怪的是,我有另一个内容页面,这个系统工作正常。它也停止了工作,我认为我没有改变主页上可能导致这种情况的任何内容。我已将CurrentUser设置为公共属性,因此我可以访问
我到目前为止创建了一个从主页重新填充对象的方法,并从内容页面上的代码隐藏中调用它:
**ContentPage code-behind:**
EpicorUser CurrentUser = Master.GetCurrentUserObject();
**MasterPage Method being invoked:**
public EpicorUser GetCurrentUserObject()
{
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "OFFICE"))
{
UserPrincipal principal = UserPrincipal.FindByIdentity(context, HttpContext.Current.User.Identity.Name);
EpicorUser CurrentEmployee = RetrieveUserInfoByWindowsID(principal.SamAccountName);
return CurrentUser; //Object is NOT null before the return
}
}
**ContentPage code-behind return:**
EpicorUser CurrentUser = Master.GetCurrentUserObject(); //But object is now null once we return
单步执行代码向我显示CurrentUser对象在后面的MasterPage代码中正确填充,但是一旦返回到后面的ContentPage代码,它现在为空!
任何人都知道断开连接的位置?
答案 0 :(得分:2)
首先加载内容页面,然后加载主页面。因此,在内容页面中访问您的属性时,您的属性可能为空。您可以尝试在母版页上创建公共方法(以返回UserObject),然后从内容页面调用该方法。
另一种选择是 创建基页类(继承所有内容页面)并创建一个属性以返回用户对象。因此,所有页面都可以访问值
编辑:
public class BasePageClass : System.Web.UI.Page
{
public List<string> LookupValues
{
get
{
if (ViewState["LookupValues"] == null)
{
/*
* create default instance here or retrieve values from Database for one time purpose
*/
ViewState["LookupValues"] = new List<string>();
}
return ViewState["LookupValues"] as List<string>;
}
}
}
public partial class WebForm6 : BasePageClass
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void MyButton_Click(object sender, EventArgs e)
{
//access lookup properties
List<string> myValues = LookupValues;
}
}