我原来的页面是 company/Csynopsis.aspx
重写后 为 0002/companyshow.aspx
提交后会提交到 0002/Csynopsis.aspx?id=0002
改怎么解决这种页面提交的问题?
重写后 为 0002/companyshow.aspx
提交后会提交到 0002/Csynopsis.aspx?id=0002
改怎么解决这种页面提交的问题?
解决方案 »
- 求助MySvhool
- FreetextBox3.2.2问题
- 在asp.net关于如何从SQL数据库显示换行,格式的问题?
- 这个谁能搞定
- 网页即时通讯技术原理
- DataGrid分页出错!
- DropDownlist控件的selectIndexChanged事件
- 不买也来看看哪:经验问题,我的非aspx页面(如htm等)怎么不进HttpModule.
- 关于dynamic data
- 及!请问在vs.net安装中,组件更新的win2000 service pack 2不能更新,怎么办? Thanks
- ======用C# 怎样将文件复制到特定的文件夹中啊??================
- 请问高手一个问题,,关于javascript...
<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 );
}
}}
public class HtmlFormAdapter : System.Web.UI.Adapters.ControlAdapter
是 2.0 新增的
那我1.1 中该怎么用呀?
在博客堂里看到的 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