主要問題,利用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>,