明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

Asp.Net : runat="server" 的form 提交到其他页面的方法

Posted on 2011-06-17 16:06  且行且思  阅读(2318)  评论(0编辑  收藏  举报


在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