C# 通过拦截回发清理用户输入-全局-ASP.NET3.5C

C# 通过拦截回发清理用户输入-全局-ASP.NET3.5C,c#,asp.net,.net-3.5,master-pages,postback,C#,Asp.net,.net 3.5,Master Pages,Postback,我有一个现有的项目,所以我需要一个坚实的方式来清理/检查用户输入,全球 我有一个母版页的父页面,它有表单标签,子页面包含表单元素,以及post back命令、insert/update/delete to database等 仅使用C-是否有某种方法可以在post通过子页面运行之前全局拦截回发 是否可以检查是否是文本框/复选框/单选按钮等,以不同方式操作用户输入的清理?只需在母版页标记处添加Jquery功能,它将截获您需要的所有事件并执行您需要的操作。为了捕获只需要的控件,您可以应用css类,您

我有一个现有的项目,所以我需要一个坚实的方式来清理/检查用户输入,全球

我有一个母版页的父页面,它有表单标签,子页面包含表单元素,以及post back命令、insert/update/delete to database等

仅使用C-是否有某种方法可以在post通过子页面运行之前全局拦截回发


是否可以检查是否是文本框/复选框/单选按钮等,以不同方式操作用户输入的清理?

只需在母版页标记处添加Jquery功能,它将截获您需要的所有事件并执行您需要的操作。为了捕获只需要的控件,您可以应用css类

,您可以使用处理context.BeginRequest事件的自定义IHTTP模块执行某些操作

public class MyHttpModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(OnBeginRequest);
    }

    protected void OnBeginRequest(object sender, EventArgs e)
    {
        var context = ((HttpApplication) sender).Context;
        // do something here, use the context to get request info
    }

    public void Dispose()
    {
    }
}
您必须在web.config中注册HttpModule,类似于:

<httpModules>
  <add name="MyHttpModule" type="MyProject.MyNamespace.MyHttpModule, MyProject"/>
</httpModules>

这就是我让它工作的原因

覆盖我的母版页上的OnInit事件

禁用“我的请求”集合的只读,使其可设置

循环浏览已发布的.Net控件,清理值并设置新值

重新启用只读

在全球范围内工作出色,为我节省了数天的体力劳动:


您是否尝试过Response.RedirectRequest.RawUrl;?重定向将丢失发布的数据:@Marc您可以使用,但您需要关闭ASP.NET validationMake base page为所有内容页,并在其中使用FindControl和checking type实现递归函数。而name ContentHolder控件在任何地方都被截取以简化搜索母版页是所有内容页的基础。检查控件类型将在我得到第一个问题的正确答案后处理。如何捕获所有发布的数据。。。!如果查看内容页cs文件,您将看到类似smth的公共部分类MyPage:System.Web.UI.page。母版页只是外部分区。仅此而已。再一次当IsPostBack=trueNevber想到使用反射访问只读、内部等字段时,在OnInit中生成递归函数-非常有用
protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        if (IsPostBack)
        {
            var fCollection = (NameValueCollection)Request.GetType().GetField("_form", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(Request);
            PropertyInfo oReadable = fCollection.GetType().GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
            oReadable.SetValue(fCollection, false, null);

            foreach (string s in Request.Params.Keys)
            {
                var pCtrl = Page.FindControl(s);

                //Sanitize the posted values (TextHandler.SimpleSanitize is my own static method)
                if (pCtrl != null) fCollection[s] = TextHandler.SimpleSanitize(fCollection[s]);
            }

            oReadable.SetValue(fCollection, true, null);

        }
    }