URL重写时 form action还原成原始URL的解决方法
2007-08-30 20:36
477 查看
这个问题早在几年前就被解决了, 但还是记录一下 .来自Cyahoga
编写FormFixerHtmlTextWriter类
using System;
using System.IO;
using System.Web.UI;
namespace Cuyahoga.Web.Util
{
/// <summary>
/// Custom HtmlWriter to override the default action attribute of the form tag.
/// We want this when the page is called with a virtual url (rewritten).
/// Thanks to Jesse Ezell for this solution: http://weblogs.asp.net/jezell/archive/2004/03/15/90045.aspx
/// 解决URL重写时 修改action url
/// </summary>
public class FormFixerHtmlTextWriter : HtmlTextWriter
{
private bool _inForm = false;
private string _action;
public FormFixerHtmlTextWriter(TextWriter writer, string tabString, string action) : base(writer, tabString)
{
this._action = action;
}
public override void WriteBeginTag(string tagName)
{
this._inForm = (tagName.Equals("form"));
base.WriteBeginTag (tagName);
}
public override void WriteAttribute(string name, string value, bool fEncode)
{
if (this._inForm)
{
if (name.Equals("action"))
{
value = this._action;
}
}
base.WriteAttribute (name, value, fEncode);
}
}
}
创建一个Page的积累 使采用URL重写的页面都继承这个类.
重写该类的render方法 便可以了
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (Context.Items["VirtualUrl"] != null)
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter, "", Context.Items["VirtualUrl"].ToString());
}
base.Render (writer);
}
这里的Context.Items["VirtualUrl"]代表原始链接的URL地址, 即context.Request.RawUrl , 需要将重写后的url改变回去. 如:section.aspx?id=1改成section-1.aspx.
编写FormFixerHtmlTextWriter类
using System;
using System.IO;
using System.Web.UI;
namespace Cuyahoga.Web.Util
{
/// <summary>
/// Custom HtmlWriter to override the default action attribute of the form tag.
/// We want this when the page is called with a virtual url (rewritten).
/// Thanks to Jesse Ezell for this solution: http://weblogs.asp.net/jezell/archive/2004/03/15/90045.aspx
/// 解决URL重写时 修改action url
/// </summary>
public class FormFixerHtmlTextWriter : HtmlTextWriter
{
private bool _inForm = false;
private string _action;
public FormFixerHtmlTextWriter(TextWriter writer, string tabString, string action) : base(writer, tabString)
{
this._action = action;
}
public override void WriteBeginTag(string tagName)
{
this._inForm = (tagName.Equals("form"));
base.WriteBeginTag (tagName);
}
public override void WriteAttribute(string name, string value, bool fEncode)
{
if (this._inForm)
{
if (name.Equals("action"))
{
value = this._action;
}
}
base.WriteAttribute (name, value, fEncode);
}
}
}
创建一个Page的积累 使采用URL重写的页面都继承这个类.
重写该类的render方法 便可以了
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (Context.Items["VirtualUrl"] != null)
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter, "", Context.Items["VirtualUrl"].ToString());
}
base.Render (writer);
}
这里的Context.Items["VirtualUrl"]代表原始链接的URL地址, 即context.Request.RawUrl , 需要将重写后的url改变回去. 如:section.aspx?id=1改成section-1.aspx.
相关文章推荐
- UrlRewriter重写地址的POSTBACK后,地址还原的解决方法
- 使用ActionlessForm.cs重写Form后使得验证控件失效的解决方法
- ThinkPHP的URL重写时遇到No input file specified的解决方法
- url传值到Action的乱码解决方法
- 解决 找不到方法:“Void System.Web.UI.HtmlControls.HtmlForm.set_Action(System.String)”。
- 过滤 URL 参数 空值,删除 FORM GET URL 空值解决函数方法
- url重写—适用html为伪静态后真实的html无法访问的解决方法
- ThinkPHP的URL重写时遇到No input file specified的解决方法
- 使用UrlRewritingNet重写url以.html的伪静态页面后,真实的.html无法访问的解决方法
- A Script Pro nginx URL重写规则无法播放MP4解决方法
- 如何在URL重写后,form标记中的Action值也用虚拟地址?
- [CCS]China Community Server几乎所有被重写的URL都无法访问的解决方法
- url重写后,html为伪静态后真实的html无法访问的解决方法
- [URL重写][转贴]如何在URL重写后,form标记中的Action值也用虚拟地址?
- ThinkPHP 的URL重写时遇到No input file specified的解决方法
- iis7下url重写后已存在的html不能访问了的解决方法
- Java解决在浏览器地址栏中输入url访问action的问题以及拦截方法过滤的简易实现
- url传值到Action乱码的解决方法
- dede采集页面form中name=action 的input跟from 的action冲突解决方法
- MVC扩展Url.Action方法解决复杂对象参数问题