我在知识库文章中找到了一个有助于实现这一目标的类,但是,该文章似乎已被删除(最初在这里: http: //www.codeproject.com/Articles/23033/Change-your-ASP-NET -Form-s-Action-attribute-with-R )。
接下来是那篇文章中提到的类。基本上,如果您使用以下类并SetFormAction(string url)
在其上调用静态方法,您将能够设置<form action="url" />
属性。
使用 System.IO;
使用 System.Text.RegularExpressions;
使用 System.Web;
///
/// 这个类的目的是方便地修改给定asp.net页面的表单“action”。
/// 要修改操作,请在您的页面(或者,更好的是,您的 MasterPage)的代码隐藏中调用以下代码:
/// 从 http://www.codeproject.com/KB/aspnet/ASP_Net_Form_Action_Attr.aspx 复制(和修改)
///
公共类 FormActionModifier :流
{
私有常量字符串 FORM_REGEX = "(]*>)";
私有流_sink;
私人多头头寸;
字符串_url;
公共 FormActionModifier(流接收器,字符串 url)
{
_sink = 水槽;
_url = string.Format("$1{0}$3", url);
}
公共覆盖布尔 CanRead
{
得到{返回真;}
}
公共覆盖布尔 CanSeek
{
得到{返回真;}
}
公共覆盖布尔 CanWrite
{
得到{返回真;}
}
公共覆盖长长度
{
得到 { 返回 0; }
}
公共覆盖多头头寸
{
得到{返回_位置;}
设置 { _position = 值;}
}
public override long Seek(long offset, System.IO.SeekOrigin 方向)
{
返回_sink.Seek(偏移量,方向);
}
公共覆盖无效SetLength(长长度)
{
_sink.SetLength(长度);
}
公共覆盖无效关闭()
{
_sink.Close();
}
公共覆盖无效冲洗()
{
_sink.Flush();
}
public override int Read(byte[] buffer, int offset, int count)
{
返回_sink.Read(缓冲区,偏移量,计数);
}
public override void Write(byte[] buffer, int offset, int count)
{
string s = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
正则表达式 reg = new Regex(FORM_REGEX, RegexOptions.IgnoreCase);
匹配 m = reg.Match(s);
如果(m.成功)
{
字符串形式 = reg.Replace(m.Value, _url);
int iform = m.Index;
int lform = m.Length;
s = string.Concat(s.Substring(0, iform), form, s.Substring(iform + lform));
}
byte[] yaz = System.Text.UTF8Encoding.UTF8.GetBytes(s);
_sink.Write(yaz, 0, yaz.Length);
}
///
/// 将表单操作设置为指定的 url
///
公共静态无效SetFormAction(字符串网址)
{
如果(HttpContext.Current!= null)
HttpContext.Current.Response.Filter = new FormActionModifier(HttpContext.Current.Response.Filter, url);
} // SetFormAction()
} // 班级