2016-02-01 14 views
0

我在我的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

你的問題與asp.net毫無關係(並沒有任何與MVC有關),但對本地變量'dr'範圍的簡單理解 - 簡而言之就是做這樣的事情,你必須宣傳'dr '到你的類中的一個靜態字段(**不推薦**) – Carsten

+1

更具體一些:它看起來像你的代碼根本沒有任何意義(例如,你用'dt'創建一個'DataView'的實例但是這個本地對象似乎只是局部的) - 那麼首先要做的這點在哪裏呢?通常情況下(如果我正確讀取),你會想要將日期保存到數據庫中,然後(在登錄時)重新加載行,添加缺失的數據並從那裏更新數據庫行 - 如果你想在內存中使用'Session'對象(再次:不推薦) – Carsten

回答

1

它將通過自變量博士存在犯規。如果您希望會話對象中的數據錶行存儲數據錶行,並將其存儲在某個關鍵字中,然後檢索它。

Session["RowDataTable"] = dr; 

請登錄頁面

var dr = Session["RowDataTable"] as DataRow; 
1

嗯不真的知道從哪裏開始:

首先你定義的變量dt和醫生只在方法在session_start的範圍內可用的() {}。 這意味着,在方法調用之後,這兩個變量不再可用。

次,如果需要還可以訪問該方法的外面你的數據,你應該把它保存在一個私有變量:

private DataTable _myDataTable; 

或在公共Propertiy從當前類的外部訪問:

public DataTable MyDataTable { get; set } 

你也應該通知您static修飾符:

https://msdn.microsoft.com/de-de/library/98f28cdx.aspx

希望能幫助你一點點。

以及您在當前形勢下要什麼,馬赫什Malpani的答案也許導致你。