URLRewriter.dll用它伪静态以后,虽然URL变了.但是如果有一个服务器端的按钮,点击以后.在显示URL就变会成  ?id=XX 了,,怎么让他回调以后依然URL不变呢??高手帮帮忙啊!

解决方案 »

  1.   

    像 test.aspx?id=5   转换成   test_5.htm 
    ... 
      

  2.   


    晕.你好好看看我的问题.我问的是怎么让他回调以后依然URL不变呢??  我现在已经是  test_5.html 这样了,但是页面一回调URL又变回 test.aspx?id=5
    怎么让他回调以后依然URL不变呢?? 
      

  3.   

    例子:a.aspx?id=1重写为a.html?id=1 
      当触发a.aspx的postback事件时,例如点击按钮后,地址又变回为a.aspx?id=1 
      解决方法如下: 
      在a.aspx页面进行如下注册: 
      <%@ Register TagPrefix="url" Namespace="Intelligencia.UrlRewriter" Assembly="Intelligencia.UrlRewriter" %> 
       
      然后,把<asp:form runat="server">替换为<url:form runat="server> 
       
      这个方法是在google的urlrewriter group中找到的。 
      参见:http://groups.google.com/group/UrlRewriter/browse_thread/thread/9eb59d8534ed0ec3/839990b919648ed9?lnk=gst&q=postback&rnum=2#839990b919648ed9 
      http://www.cnblogs.com/yurichou/archive/2007/01/09/616001.html 【转自www.bitsCN.com】
      

  4.   

    两个解决办法:
    第一:是在按钮点击事件里处理完后做一下页面跳转,跳转到你重写后的地址***.html
    第二:按钮事件采用ajax方式处理
      

  5.   

    处理回发
    在重写后的url里如果产生回发,例如有一个按钮,又调用了该被重写的aspx,用户浏览器中将会显示该aspx文件实际的地址,也就是http: //hostname/default.aspx?id=11。但从用户的角度考虑,如 果单击按钮时突然看到 URL 更改会使他们感到不安。因此必须解决这个问题。
    解决方法有二:
    (1)自己定义一个Actionlessform类,在aspx中不再使用系统提供的form 标记namespace ActionlessForm 
    {
        public class Form : System.Web.UI.HtmlControls.HtmlForm
        {
            protected override void RenderAttributes(HtmlTextWriter writer)
            {
                writer.WriteAttribute("name", this.Name);
                base.Attributes.Remove("name");
                writer.WriteAttribute("method", this.Method);
                base.Attributes.Remove("method");
                this.Attributes.Render(writer);
                base.Attributes.Remove("action");
                if (base.ID != null)
                    writer.WriteAttribute("id", base.ClientID);
             }
        }
    }创建此类并对其进行编译之后,要在 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>个人并不推荐该方法
    (2)第二种方法就是继承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这样就解决回发问题。
      

  6.   

    还有一种方法是写一个适配器一样的东西。直接更改asp:form服务器控件的。忘了文章在哪了。不好意思
      

  7.   

    http://www.svnhost.cn/Article/Detail-123.shtml