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);
}
}
}
<%@ Register TagPrefix='skm' Namespace='ActionlessForm'
Assembly='ActionlessForm' %>
然后,将 <form runat='server'>(如果有)替换为:
<skm:Form id='Form1' method='post' runat='server'>
并将右边的 </form> 标记替换为:
</skm:Form>
---或者
using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace URl
{
/**//// <summary>
/// 页面基类
/// </summary>
public class OLPage : Page
{
public OLPage()
{
}
/**//// <summary>
/// 重写默认的HtmlTextWriter方法,修改form标记中的value属性,使其值为重写的URL而不是真实URL。
/// </summary>
/// <param name='writer'></param>
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)
{
// 如果当前输出的属性为form标记的action属性,则将其值替换为重写后的虚假URL
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);
}
}
}