項目:xx 之 手工派單
項目介紹: xx 有兩個派單形式,一是自動派單,二是手工派單.自動派單已經有程序實現,因此,需要用c#實現手工派單模塊,由於xx的派單流程是 從綜合告警(c/s)傳 整個告警對象的某些設置的屬性 到emos(電子運維)系統(b/s),因此,在該模塊中,用到了webbrowser控件.
程序處理流程介紹:
在程序中,首先讀取一個配置文件的結點,查找到告警對象的某個屬性,然後獲取屬性值(用反射),拼一個htm頁面.該頁面代碼如下:
string s=
<html xmlns='http://www.w3.org/1999/xhtml'>
<meta http-equiv='Content-Type' content='text/html;charset=gb2312'>
<head><title>表單設置</title>
</head>
<body id='CForwardDlg' BGCOLOR='LIGHTGREY' onload='onload();'>
<form method='post' action='http://localhost/test.asp' id='ID_AlarmForm' name='ID_AlarmForm'>
<input type='hidden' name='oriAlarmId' id='ID_oriAlarmId' value='2007-8-21 21:36:42'/>
<input type='hidden' name='alarmTitle' id='ID_alarmTitle' value='HLR北京'/>
<input type='hidden' name='alarmCreateTime' id='ID_alarmCreateTime' value='www'/>
<input type='hidden' name='neType' id='ID_neType' value='beijing'/>
<input type='hidden' name='neName' id='ID_neName' value='hubeisheng'/>
<input type='hidden' name='alarmLevel' id='ID_alarmLevel' value='wuhanshi'/>
<input type='hidden' name='alarmType' id='ID_alarmType' value='12222'/>
</form>
<script language='javascript' type='text/javascript'>
function onload()
{
var tt=document.getElementById('ID_AlarmForm');
if(tt!=undefined)
{
tt.submit();
}
}
</script>
</body>
</html>
然後,post接收頁面:
<head>
<title>工單手工前轉</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"/>
<script language="JavaScript">
<!--
function onload()
{
document.ID_AlarmForm.submit();
}
-->
</script>
</head>
<BODY BGCOLOR=LIGHTGREY>
<div id="DB">
</div>
<pre>
userName :<% =request("userName") %>
systemName :<% =request("systemName") %>
serSupplier :<% =request("serSupplier") %>
serCaller :<% =request("serCaller") %>
callTime :<% =request("callTime") %>
alarmID :<% =request("alarmID") %>
orialarmId :<% =request("oriAlarmId") %>
alarmTitle :<% =request("alarmTitle") %>
alarmCreateTime :<% =request("alarmCreateTime") %>
neType :<% =request("neType") %>
neName :<% =request("neName") %>
alarmLevel :<% =request("alarmLevel") %>
alarmType :<% =request("alarmType") %>
alarmRedefLevel :<% =request("alarmRedefLevel") %>
alarmRedefType :<% =request("alarmRedefType") %>
alarmLocation :<% =request("alarmLocation") %>
alarmDetail :<% =request("alarmDetail") %>
alarmPropose :<% =request("alarmPropose") %>
alarmRegion :<% =request("alarmRegion") %>
</pre>
<!-- 當派單成功或取消時模擬Click下面相應的BUTTON,ID保持不變-->
<BUTTON STYLE="WIDTH:30" ID="ButtonOK">確定</BUTTON>
<BUTTON STYLE="WIDTH:30" ID="ButtonCancel">取消</BUTTON>
</BODY>
</HTML>
webbrowser綁定:
webBrowser.DocumentText=s;
最後,在頁面上,webbrowser上顯示的結果,最後接收頁面,中文會出現亂碼.而如果把這兩處代碼保存爲htm 和asp頁面後,瀏覽htm頁面post後asp頁面不會出現亂碼.
解決辦法:
程序中不拼寫第一個頁面,改爲這樣的:
strTemp = string.Format(@"{0}={1}&", s, System.Web.HttpUtility.UrlEncode(strValue, System.Text.Encoding.GetEncoding("gb2312")));
strBuilder.Append(strTemp);
既弄成象url地址一樣的串.但是,主要的一點,還是 System.Web.HttpUtility.UrlEncode的轉換.
最後,綁定到webbrowser控件:
string headers = "Content-Type: application/x-www-form-urlencoded";
this.webBrowser.Navigate(http://localhost/test.asp, "", System.Text.Encoding.GetEncoding("gb2312").GetBytes(s), headers);
讀取webBrowser的源碼
不能夠直接用webBrowser.DocumentText讀取,這樣出來的是亂碼
System.IO.StreamReader streamReader = new System.IO.StreamReader(this.webBrowser.DocumentStream, System.Text.Encoding.GetEncoding("gb2312"));
string strWebBrowserDocument = streamReader.ReadToEnd();