asp.Neturl書き換え後のページ再送問題

2683 ワード

具体的には、ページベースクラスをカスタマイズすることで、デフォルトのHtmlTextWriterメソッドを書き換え、属性出力WriteAttribute(string name,string value,bool encode)メソッドを書き換え、actionを出力と、action属性の値を現在の虚URL(HttpContext.Current.Request.RawUrl、上の~/showVisasAll_(w+)に強制的に変換することができる.aspx)
最後にすべてのページにこのベースクラスを呼び出して、Webを修正します.configでいい
ページベースクラスの完全なコードを添付します(CSコードを参照してください):
 
  
using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace Openlab.Controls
...{
/**////
///
///

public class OLPage : Page
...{
public OLPage()
...{
}
Render#region Render
/**////
/// HtmlTextWriter , form value , URL URL。
///

///
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);
}
#endregion
}
FormFixers#region FormFixers
FormFixerHtml32TextWriter#region FormFixerHtml32TextWriter
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);
}
}
#endregion
FormFixerHtmlTextWriter#region FormFixerHtmlTextWriter
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);
}
}
#endregion
#endregion
}