在ASP轉換到asp.net的問題
在一個普通的asp列表中,可以使用X1.Pager帶來的便利。
由於X1.Pager需要一個runat=server的Form,我們可以採用幾種方法改造頁面。
方法1、直接修改form的運行位置
如果將原有的form改為runat=server,如果原來的form中僅有屬性name=formName 注意加上id=formName,這樣頁面中的元素標識同原來一樣,不必改動太多。
如果不加這個屬性,runat=server的form在形成頁面form後,就會是這樣的
<form method="post" action="List.aspx" >
這樣,就會出現javascript指令碼可能找不到元素的問題。
如果原有的頁面有這樣的代碼:
document.frmThis.action = "Other.aspx?dataid=<%=ColumnID%>&troop=1";
document.frmThis.submit();
將form中的input提交到其他頁面Other.aspx,在下一個頁面Other.aspx會產生,ViewState非法的異常。這是因為runat=server的form加了一個隱含的__VIEWSTATE,用於檢視狀態(ViewState)機制的狀態值,這個狀態值經過一定的編碼,同伺服器端的變數進行對應。
由於下一個頁面Other.aspx沒有對應的變數,所以就產生異常。
所以如果有這樣的代碼,就要另外增加一個普通的form,進行資料的傳遞
<form method="post" >
在指令碼中,增加一個將主form中的值傳遞到frmThis的方法
postString = document.all.Abc.value ;
document.frmThis.chkFileId.value = postString ;
document.frmThis.action = "TroopVol.aspx?dataid=<%=ColumnID%>&troop=1";
document.frmThis.submit();
如果提交的input比較多,這樣做就會非常痛苦。所以,如果有document.frmThis.submit();這類的代碼,請使用方法2。
方法2、為PageBar增加一個單獨的runat=Server的from
這樣,原有的form就不必改動了,仍然繼續使用,那些javascript中的submit也會很正常使用,不必改動。
這樣程式碼範例:
<form method="post" runat="server">
<cc1:pagebar runat="server"></cc1:pagebar>
</form>
注意的問題:
新增form不要同原有的form嵌套或重疊,可以將主form在PageBar之前結束。
由於form會產生一定的頁面空白,所以,可以放在一些比較隱含的位置,如<table>和<tr>之間
方法3、徹底解決asp表單的提交。
完全將asp方式的表單變為asp.net的表單。
將document.frmThis.submit();方式的提交,轉變為伺服器端事件的方式,在伺服器端提交到邏輯層,或者重新導向到其他頁面Other.aspx