我原来的页面是 company/Csynopsis.aspx
重写后 为 0002/companyshow.aspx
提交后会提交到 0002/Csynopsis.aspx?id=0002
改怎么解决这种页面提交的问题?

解决方案 »

  1.   

    使用Adapter
    <browsers>
      <browser refID="Default">
        <controlAdapters>
          <adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
              adapterType="AspxBoy.DotNetJobs.Adapters.HtmlFormAdapter" />
        </controlAdapters>
      </browser>
    </browsers>//------------------------------------------------------------------------------
    // <copyright company="Meibo Wu www.AspxBoy.com">
    //     Copyright (c) www.AspxBoy.com  All rights reserved.
    // </copyright> 
    //------------------------------------------------------------------------------using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Reflection;
    using System.IO;namespace AspxBoy.DotNetJobs.Adapters
    {
        public class HtmlFormAdapter :  System.Web.UI.Adapters.ControlAdapter
        {
       
            protected override void Render( System.Web.UI.HtmlTextWriter writer )
            {
                base.Render( new FormRewriteTextWriter( writer ) );
            }    }    internal class FormRewriteTextWriter : HtmlTextWriter
        {
            private static readonly string alreadyRewirteKey = "AspxBoy.DotNetJobsCn.FormActionAlreadyRewrote";
            public FormRewriteTextWriter( TextWriter writer )
                : base( writer )
            {
                if ( writer is HtmlTextWriter )
                {
                    this.InnerWriter = ( writer as HtmlTextWriter ).InnerWriter;
                }
                else
                {
                    this.InnerWriter = writer;
                }
            }        public override void WriteAttribute( string name , string value , bool fEncode )
            {
                HttpContext context = HttpContext.Current;
                if ( name == "action" && context.Items[ alreadyRewirteKey ] == null )
                {
                    value = context.Request.RawUrl;
                    context.Items[ alreadyRewirteKey ] = true;
                }
                base.WriteAttribute( name , value , fEncode );
            }
        }}
      

  2.   

    LS 写的 
     public class HtmlFormAdapter :  System.Web.UI.Adapters.ControlAdapter
    是 2.0 新增的
    那我1.1  中该怎么用呀?
      

  3.   

    UrlReWrite(Url重写或伪静态)完美示例源码,已利用ActionlessForm解决原始地址form回传的问题 http://www.51aspx.com/CV/UrlReWriter/
      

  4.   

    解决拉 
    在博客堂里看到的 2.处理回发
    在重写后的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)以上的是继承个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