主要問題,利用webclent獲取頁面源代碼時(shí),當(dāng)頁面中含有datagrid,并且該控件
使用了自帶的分頁功能時(shí),正常的方法只能獲取第一頁面的數(shù)據(jù),其它頁面的數(shù)據(jù)
取不到,以下是解決方法。
方法一:
主要思路是利用webclient,post數(shù)據(jù)到服務(wù)來取得數(shù)據(jù),這里主要用了一個(gè)小工具
可以分析頁面的組成及運(yùn)行過程,分析中發(fā)現(xiàn)當(dāng)點(diǎn)擊下一頁時(shí),會Post三個(gè)參數(shù)過去,
分別是:__EVENTTARGET、__EVENTARGUMENT、__VIEWSTATE。這里__VIEWSTATE參數(shù)在從打開第一頁數(shù)據(jù)時(shí)取得,__EVENTTARGET為要調(diào)用控件的名稱(可以通過httpwatch來獲取) ,__EVENTARGUMENT是調(diào)用事件時(shí)的參數(shù),代碼如下:
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>,
出處:http://bccu.VEVb.com/archive/2006/05/11/397382.html
|
新聞熱點(diǎn)
疑難解答
圖片精選