创建此类并对其进行编译之后,要在 ASP.NET Web 应用程序中使用它,应首先将其添加到 Web 应用程序的 References 文件夹中。然后,要使用它来代替 HtmlForm 类,做法是在 ASP.NET 网页的顶部添加以下内容: <%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
然后,将 <form runat="server">(如果有)替换为:<skm:Form id="Form1" method="post" runat="server"> 并将右边的 </form> 标记替换为:</skm:Form> /******************************************/ 以上的方法:页面会出现创建控制项发生错误情况,接下来介绍不用以上的方法 将页面的<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>删除,将 :<skm:Form id="Form1" method="post" runat="server"> (如果有)替换为<form runat="server">并将右边的 </skm:form> 标记替换为:</Form> 然后执行下面的做法 (2)以上的是继承个form,第二种方法就是继承page,这样你不需要在aspx页中改任何东西。 代码: 复制代码 代码如下: using System; using System.IO; using System.Web; using System.Web.UI; namespace URL { public class OLPage : Page { public OLPage() {} protected override void Render(HtmlTextWriter writer) { if (writer is System.Web.UI.Html32TextWriter) { writer = new FormFixerHtml32TextWriter(writer.InnerWriter); } else { writer = new FormFixerHtmlTextWriter(writer.InnerWriter); } base.Render(writer); }} internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter { private string _url; // 假的URL internal FormFixerHtml32TextWriter(TextWriter writer):base(writer) { _url = HttpContext.Current.Request.RawUrl; } public override void WriteAttribute(string name, string value, bool encode) { if (_url != null && string.Compare(name, "action", true) == 0) { value = _url; } base.WriteAttribute(name, value, encode); } } internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter { private string _url; internal FormFixerHtmlTextWriter(TextWriter writer):base(writer) { _url = HttpContext.Current.Request.RawUrl; } public override void WriteAttribute(string name, string value, bool encode) { if (_url != null && string.Compare(name, "action", true) == 0) { value = _url; } base.WriteAttribute(name, value, encode); }}}
把这个文件编译成dll,并在你的项目中引用它。 然后把项目中的所有aspx文件对应的cs文件中的继承page类的代码改写为继承OLPage。 例如 public class WebForm1:page 改写为 public class WebForm1:URL.OLPage 这样就解决回发问题。 (3)通过客户端代码清除form的action。 对于ASPX页面,我们在客户端查看代码时会发现,它自动为form加入了action,并且地址就是开头所说的原始页面地址。而对于ASPX页面,若当它的action为空时也就将回发到当前地址。这样我们就可以通过在客户端清除action的方法,来实现回发后继续保持有地址。 在页面中加入以下代码即可: <script type="text/javascript">try{document.forms[0].action=""}catch(ex){}</script> 这种方法应是最简单的,而且也不用改动原来的代码。