Url重写之action改变的问题

王朝c#·作者佚名  2006-12-16
宽屏版  字体: |||超大  

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);

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有