这是一个朋友的想法,刚开始我第一感觉是截留HtmlTextWriter的RenderBeforeTag事件
不过发现Input Type="Hidden"都不影应这个事件,郁闷
Reflector查看RegisterHiddenField发现它们都存在于一个私有成员中
最后没办法,只有使用页面过滤器了
因为是一个简单的示例,所以两个类文件写在一起了,编译后生成的dll文件名为Blackant.Controls.dll
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Xml;
using System.Text.RegularExpressions;
using System.IO;
namespace Blackant.Controls
{
/// <summary>
/// Summary description for HiddenInputFilter
/// </summary>
public class HiddenInputHttpModule : IHttpModule
{
IHttpModule Members
事件
IRawPath Members
}
public class HiddenInputFilter : Stream
{
私有成员
构造
重写的方法
}
}
然后在web项目中引用这个dll
修改web.config,加入以下内容于System.Web配置节
其实核心内容很简单
HiddenInputHttpModule中如下指示使用页面过滤器
HiddenInputFilter filter = new HiddenInputFilter(response.Filter);
response.Filter = filter;
HiddenInputFilter 中则
string finalHtml = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
//找到<input type="hidden" name="__VIEWSTATE"
string pattern=@"/<input type=""hidden"" name=""__VIEWSTATE""[^/>]*/>";
finalHtml=Regex.Replace(finalHtml, pattern, string.Empty, RegexOptions.IgnoreCase | RegexOptions.Multiline);
替换掉<input type="hidden" name="__VIEWSTATE" ..../>标签
不过发现Input Type="Hidden"都不影应这个事件,郁闷
Reflector查看RegisterHiddenField发现它们都存在于一个私有成员中
最后没办法,只有使用页面过滤器了
因为是一个简单的示例,所以两个类文件写在一起了,编译后生成的dll文件名为Blackant.Controls.dll
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Xml;
using System.Text.RegularExpressions;
using System.IO;
namespace Blackant.Controls
{
/// <summary>
/// Summary description for HiddenInputFilter
/// </summary>
public class HiddenInputHttpModule : IHttpModule
{
IHttpModule Members
事件
IRawPath Members
}
public class HiddenInputFilter : Stream
{
私有成员
构造
重写的方法
}
}
然后在web项目中引用这个dll
修改web.config,加入以下内容于System.Web配置节
<
httpModules
>
< add name ="HiddenInputFilter" type ="Blackant.Controls.HiddenInputHttpModule,Blackant.Controls" />
</ httpModules >
< add name ="HiddenInputFilter" type ="Blackant.Controls.HiddenInputHttpModule,Blackant.Controls" />
</ httpModules >
其实核心内容很简单
HiddenInputHttpModule中如下指示使用页面过滤器
HiddenInputFilter filter = new HiddenInputFilter(response.Filter);
response.Filter = filter;
HiddenInputFilter 中则
string finalHtml = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
//找到<input type="hidden" name="__VIEWSTATE"
string pattern=@"/<input type=""hidden"" name=""__VIEWSTATE""[^/>]*/>";
finalHtml=Regex.Replace(finalHtml, pattern, string.Empty, RegexOptions.IgnoreCase | RegexOptions.Multiline);
替换掉<input type="hidden" name="__VIEWSTATE" ..../>标签