頁面中包括datagrid時,利用webclient獲取頁面源代碼的解決方
主要問題,利用webclent獲取頁面源代碼時,當頁面中含有datagrid,并且該控件使用了自帶的分頁功能時,正常的方法只能獲取第一頁面的數據,其它頁面的數據取不到,以下是解決方法。
方法一:
主要思路是利用webclient,post數據到服務來取得數據,這里主要用了一個小工具可以分析頁面的組成及運行過程,分析中發現當點擊下一頁時,會post三個參數過去, 分別是:__eventtarget、__eventargument、__viewstate。這里__viewstate參數在從打開第一頁數據時取得,__eventtarget為要調用控件的名稱(可以通過httpwatch來獲取) ,__eventargument是調用事件時的參數,代碼如下:
string result="";
result = this.loadtop ("http://localhost/projectinfo.aspx?jobno1=2001-09110");
string vie = gettagcontent(result,"name=/"__viewstate/" value=/"","/" />");
vie=vie.replace ("name=/"__viewstate/" value=/"","");
vie=vie.replace ("/" />","");
webclient a = new webclient();
namevaluecollection na = new namevaluecollection();
na.add("__eventtarget","newhousegridmodule1:modulesplitpage:lbnnextpage");
na.add("__viewstate",vie);
byte [] ss = a.uploadvalues("http://localhost/projectinfo.aspx?jobno1=2001-09110","post",na);
encoding encode=encoding .getencoding ("utf-8");
result=encode.getstring(ss);
方法二:
利用axwebbrowser控件,下載第一頁,然后在最下面這如下代碼:
<script language='javascript' type='text/javascript'>__dopostback('newhousegridmodule1$modulesplitpage$lbnnextpage','');</script>
新聞熱點
疑難解答
圖片精選