我在global.asax文件中创建了一个包含四列的数据表。我只将行添加到global.asax文件中的数据表的两列。我试图从同一项目下的不同.aspx.cs文件中添加另外两行。当我尝试添加行时,它会给我一个错误
“名称”dr“在当前上下文中不存在”。
我的代码:
login.aspx.cs:
protected void btnLogin_Click(object sender, EventArgs e)
{
if(txtPassword.Text == "")
{
Server.Transfer("Main.aspx", true);
}
if(txtUserName.Text!= "" && txtPassword.Text!= "")
{
Server.Transfer("Userlog.aspx", true);
}
dr["username"] = Session["UserName"]; // username
dr["login_time"] = Session["LoginTime"]; //login time
}
global.asax中:
void Session_Start(Object s, EventArgs e)
{
Application.Lock();
dt = new DataTable();
dt.Columns.Add(new DataColumn("session_id", System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("username", System.Type.GetType("System.String")));
dt.Columns.Add(new DataColumn("login_time", System.Type.GetType("System.DateTime")));
dt.Columns.Add(new DataColumn("ip_address", System.Type.GetType("System.String")));
Application["visitorTable"] = dt;
DataRow dr = dt.NewRow();
dr["session_id"] = (System.String)Session.SessionID; // session id
dr["ip_address"] = Request.ServerVariables["SERVER_NAME"]; //ip-address
dt.Rows.Add(dr);
//dt = (DataTable)Application["visitorTable"];
Application["visitorTable"] = dt;
DataView view = new DataView(dt);
Application.UnLock();
}
答案 0 :(得分:1)
因为dr变量不存在所以它将通过。如果您希望会话对象中的数据表行然后存储带有一些关键字的数据表行,然后检索它。
Session["RowDataTable"] = dr;
然后登录页面
var dr = Session["RowDataTable"] as DataRow;
答案 1 :(得分:1)
嗯,不知道从哪里开始:
首先,您定义的变量dt和dr仅在方法Session_Start(){}的范围内可用。 这意味着,在方法调用之后,这两个变量不再可用。
辅助,如果您需要在该方法之外访问您的数据,则应将其存储在私有变量中:
private DataTable _myDataTable;
或在公共场所从当前班级以外的地方访问它:
public DataTable MyDataTable { get; set }
您还应该告知您有关静态修饰符的信息:
https://msdn.microsoft.com/de-de/library/98f28cdx.aspx
希望能帮助你一点点。
对于你在目前情况下想要的东西, Mahesh Malpani 的答案可能会引导你。