您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何淺析ASP.NET虛擬主機在文件目錄管理時的隱患,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
ASP.NET虛擬主機在文件目錄管理時的隱患是什么么?首先讓我們看一個實例,顯示目錄中所有子目錄和文件的程序listdir.aspx
目錄下有子目錄和文件兩種形式,必須分別對待。我們調用此程序本身對子目錄進行列表顯示,而文件我們需要調用showfile.aspx程序對文件的屬性和內容進行顯示。并且兩者還有不同的刪除方法,所以我們在這里設置了兩個DataGrid,兩個DataTable,兩個DataView,分別處理和顯示目錄和文件。
ASP.NET虛擬主機在文件目錄管理時顯示和處理目錄和文件的DataGrid的代碼(代碼在listdir.aspx文件):
顯示目錄或文件的序號和名稱的數據列類似于listdrivers.aspx程序中的相應代碼,這里就不再重復了。對于子目錄和文件分別有各自的處理頁面,所以需要導航到兩個不同的頁面,對于子目錄,我們繼續使用listdir.aspx程序對其下的子目錄和文件進行列表顯示:
﹤asp:HyperLinkColumn DataNavigateUrlField="DirName" DataNavigateUrlFormatString="listdir.aspx?dir={0}" DataTextField="DirDetail" HeaderText="詳細信息" Target="_new" /﹥
對于文件,我們使用showfile.aspx程序顯示其屬性和內容:
﹤asp:HyperLinkColumn DataNavigateUrlField="FileName" DataNavigateUrlFormatString="showfile.aspx?file={0}" DataTextField="FileDetail" HeaderText="詳細信息" Target="_new" /﹥
在兩個DataGrid(DirGrid,FileGrid)中我們分別設置了兩個HyperLinkColumn列來導航到不同的處理頁面。
ASP.NET虛擬主機在文件目錄管理時在兩個DataGrid中我們都使用了一個刪除的按鈕列:
﹤asp:ButtonColumn HeaderText="刪除" Text="刪除" CommandName="Delete" /﹥
由于添加、更新、刪除功能列都是DataGrid的默認模板列,所以可以在Vs.net中通過DataGrid的屬性生成器自動添加此列。
獲取上一頁面所傳遞來的參數的代碼:
因為在下面產生數據源的方法中需要使用由上一個頁面傳遞過來的參數來確定目錄和文件的名稱,所以在頁面的Page_Load方法里使用了下列代碼:
strDir2List = Request.QueryString["dir"];
字符串strDir2List即傳過來的目錄名或文件名。
因為我們使用了兩個DateGrid,就需要進行兩次數據綁定,就有兩個不同的生成數據源的方法。
生成目錄數據網格(DirGrid)數據源的方法:
//通過此方法返回一個集合形式的數據視圖DataView,用來初始化子目錄的DataGrid ICollection CreateDataSourceDir() { dtDir = new DataTable(); DataRow dr; //向DataTable中添加新的數據列,共四列 dtDir.Columns.Add(new DataColumn("DirID", typeof(Int32))); dtDir.Columns.Add(new DataColumn("DirName", typeof(string))); dtDir.Columns.Add(new DataColumn("DelDir", typeof(string))); dtDir.Columns.Add(new DataColumn("DirDetail", typeof(string))); //根據傳入的參數(目錄名)得到此目錄下所有子目錄名的字符串數組 string [] DirEntries = Directory.GetDirectories(strDir2List); //使用foreach循環可以對未知長度的數組進行遍歷循環 foreach(string DirName in DirEntries){ dr = dtDir.NewRow(); dr[0] = i;//序號 dr[1] = DirName;//文件夾名稱 dr[3] = "刪除"; dr[3] = "查看詳情"; dtDir.Rows.Add(dr); i++; } DataView dvDir = new DataView(dtDir); //返回得到的數據視圖 return dvDir; }
ASP.NET虛擬主機在文件目錄管理時生成文件數據網格(FileGrid)數據源的方法:
//通過此方法返回一個集合形式的數據視圖DataView,用來初始化文件的DataGrid ICollection CreateDataSourceFile() { dtFile = new DataTable(); DataRow dr; dtFile.Columns.Add(new DataColumn("FileID", typeof(Int32))); dtFile.Columns.Add(new DataColumn("FileName", typeof(string))); dtFile.Columns.Add(new DataColumn("DelFile", typeof(string))); dtFile.Columns.Add(new DataColumn("FileDetail", typeof(string))); //根據傳入的參數(目錄名)得到此目錄下所有文件名的字符串數組 string [] FileEntries = Directory.GetFiles(strDir2List); foreach(string FileName in FileEntries){ dr = dtFile.NewRow(); dr[0] = i; dr[1] = FileName; dr[2] = "刪除"; dr[3] = "查看詳情"; dtFile.Rows.Add(dr); i++; } dvFile = new DataView(dtFile); return dvFile; }
我們編程實現了兩個DataSource只需在頁面的Page_Load方法里對兩個DataGrid進行數據綁定即可將得到的DataTable中的數據顯示在aspx頁面的DataGrid上。
數據綁定代碼:
//對子目錄數據列表DirGrid進行數據源定義和數據綁定 DirGrid.DataSource = CreateDataSourceDir(); DirGrid.DataBind(); //對文件數據列表FileGrid進行數據源定義和數據綁定 FileGrid.DataSource = CreateDataSourceFile(); FileGrid.DataBind();
通過我們上邊介紹的主要方法,我們實現了對某個邏輯驅動器或目錄中的所有子目錄和文件進行了列表顯示,并且可以根據顯示結果更進一步的瀏覽子目錄或者查看文件的屬性和內容提要。瀏覽子目錄仍然是通過listdir.aspx這個程序,沒有任何子目錄級別要求,沒有目錄深度限制。
關于如何淺析ASP.NET虛擬主機在文件目錄管理時的隱患就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。