C# 获取集属性c的问题#
我被这件事缠住了,我真的要在几分钟内把头撞到墙上 我有一个日志页面,用户在其中输入用户名和密码,并在按下此按钮时单击登录。将调用一个函数来获取所有用户详细信息,即firstname姓氏Email AccountType Examtaken等,我试图在函数中设置“get;set;”属性,以便我可以在主页上使用它们,但出于我不知道的愚蠢原因,它不起作用!下面您将看到当用户单击login时调用的方法C# 获取集属性c的问题#,c#,asp.net,C#,Asp.net,我被这件事缠住了,我真的要在几分钟内把头撞到墙上 我有一个日志页面,用户在其中输入用户名和密码,并在按下此按钮时单击登录。将调用一个函数来获取所有用户详细信息,即firstname姓氏Email AccountType Examtaken等,我试图在函数中设置“get;set;”属性,以便我可以在主页上使用它们,但出于我不知道的愚蠢原因,它不起作用!下面您将看到当用户单击login时调用的方法 public class ExamMethods { public int UserID {
public class ExamMethods
{
public int UserID { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public string Email { get; set; }
public int AccountType { get; set; }
public bool ExamTaken { get; set; }
private enum Datafield
{
UserID,
FirstName,
Surname,
Email,
AccountType,
ExamTaken,
}
public Hashtable CheckLogin(Hashtable Usercredentials)
{
try
{
SqlConnection Connection = new SQLAccess().CreateConnection();
SqlCommand Command = new SqlCommand("GetUserDetails", Connection);
Command.CommandType = System.Data.CommandType.StoredProcedure;
foreach (DictionaryEntry SpParameter in Usercredentials)
{
Command.Parameters.Add(new SqlParameter(SpParameter.Key.ToString(), SpParameter.Value.ToString()));
}
SqlDataReader da = Command.ExecuteReader();
while (da.Read())
{
Details.Add("UserID", da["UserID"]);
UserID = (da.IsDBNull((int)Datafield.UserID)) ? 0 : da.GetInt32((int)Datafield.UserID);
Details.Add("FirstName", da["FirstName"]);
FirstName = (da.IsDBNull((int)Datafield.FirstName)) ? "" : da.GetString((int)Datafield.FirstName);
Details.Add("Surname", da["Surname"]);
Surname = (da.IsDBNull((int)Datafield.Surname)) ? "" : da.GetString((int)Datafield.Surname);
//Details.Add("AccountType", da["AccountType"]);
//AccountType = (da.IsDBNull((int)Datafield.AccountType)) ? 0 : da.GetInt32((int)Datafield.AccountType);
//Details.Add("ExamTaken", da["ExamTaken"]);
//ExamTaken = (da.IsDBNull((int)Datafield.ExamTaken)) ? false : da.GetBoolean((int)Datafield.ExamTaken);
}
Connection.Close();
da.Close();
return Details;
}
catch
{
Console.WriteLine("Error Checking Login Details");
return Details;
}
}
}
正如您在上面的while(da.read)中看到的,我在调试时将值分配给哈希表和get set方法,我可以看到值进入!im 100%此值不为null或空
然后,代码返回到登录页面,如果一切正常,则返回response。重定向到用户可以参加考试的主页,但在home.aspx的页面加载中,我有一个标签,我想用用户名弹出,因此我引用ExamMethods类上的get属性,但它为null?这怎么可能呢?我错过了什么?
这是back home.aspx页面的代码
public partial class Home : System.Web.UI.Page
{
Hashtable UpdateUser = new Hashtable();
protected void Page_Load(object sender, EventArgs e)
{
Methods.ExamMethods obj_UserDetails = new Methods.ExamMethods();
if (Request.QueryString["uid"] == null)
{
Response.Redirect("Login.aspx");
}
else
lblUserName.Text = obj_UserDetails.FirstName;
}
是因为我使用了从登录页到主页的reponse.redirect,所以get set方法什么都不是?在处理网页时,网页之间不会共享变量。您可能知道HTTP是一种无状态协议 那我该怎么做呢 你需要国家管理。你需要一种传递信息的方式。据我所见,似乎是存储这些数据的最佳位置,您需要在多个页面中使用这些数据 但会话并不是唯一的状态管理选项。根据您要存储的内容、存储的数量以及访问它们的位置/时间,您还有更多
我建议您仔细阅读,也要仔细阅读,了解在哪种情况下使用哪种状态管理功能。在
Page\u Load
方法中,您每次都在创建方法的新实例。ExamMethods()
,因此它的所有属性都不会初始化。重定向到登录页面后,执行登录并重定向回,page\u Load
再次执行,并创建该类的新实例
当您在QueryString
中定义了用户数据时,最好的方法是基于uid
从数据库中读取用户数据
protected void Page_Load(object sender, EventArgs e)
{
Methods.ExamMethods obj_UserDetails = new Methods.ExamMethods();
if (Request.QueryString["uid"] == null)
{
Response.Redirect("Login.aspx");
}
else
{
if (!Page.IsPostback)
{
//read value of uid parameter
int uid = Request.QueryString["uid"];
//access database to retrieve user's details
obj_UserDetails = GetUserDetails(uid);
lblUserName.Text = obj_UserDetails.FirstName;
}
}
}
您可以使用Page.IsPostback
属性用用户数据填充控件,这也是值得的。在回发ViewState
时,机制应保留控件的内容
还有一些其他机制允许您在页面之间传递数据,如会话状态。如果您需要更多页面上的用户详细信息,而不仅仅是这两个页面,则可以使用此选项。这样,您就不必经常访问数据库
使用Server.Transer()
方法将用户重定向到另一个页面,使用PreviousPage
对象也可以访问其他页面,但我认为使用QueryString
和直接在主页上读取数据最适合您的情况
有帮助的链接:
Session["data"] = new Data("SomeData");
当你再次需要数据时,你可以这样做
var data = Session["data"] as Data;
if(data != null)
//do something with the data
看到了吗,当我从一个页面转到另一个页面时,我想是这样的,我会看看那个链接,谢谢你提供的信息。我是否错过了你实际调用的
CheckLogin
?当你不调用你所询问的方法时,很难说出哪里出了问题。我尽量不调用服务器,这样在我看来性能会更好,但我对你提供的代码片段感兴趣,但是我确实有一个问题,如果有意义的话,我如何将其声明为一个全局会话?例如,我刚刚调用了服务器以获取信息。当我被发送到主页时,我向该页面上的会话变量添加了详细信息。我如何引用位于“方法”页面上的会话变量?我不知道你真正的意思,您可以从de会话中获取数据,并对其进行操作,或者向其中添加数据,当您准备就绪时,您可以再次向会话中添加取消操作的变量