我可以通过页面加载功能快速运行整个页面的文本吗?

时间:2010-05-14 20:34:03

标签: c# asp.net class function

我在XML文件中设置了一个带有错误单词的亵渎过滤器,并在我的页面上运行以下功能来替换单词:

BadWordFilter.Instance.GetCleanString(TextBox1.Text);

我即将通过我的整个网站,现在将这个功能逐个包裹在每个小文本变量中,这将是一个非常痛苦的屁股

我希望有一种方法可以设置我的母版页以在任何page_load上自动运行所有文本,这样效果将立即在整个网站范围内。这有可能吗?

非常感谢任何帮助

2 个答案:

答案 0 :(得分:1)

我的一个简单提示是使用asp.net的标记映射功能:

  • 创建从TextBox类派生的自定义文本框类
  • 覆盖get / set Text属性&在get部分中,返回已清理的字符串
  • 使用web.config文件中的标记映射功能将所有TextBox类替换为自定义文本框类&一切都应该运作得很好。

此链接有一个使用HTMLEncode的示例实现,但您明白了这一点:http://www.devwebpro.co.uk/devwebprouk-46-20071010ASPNETTagMapping.html

HTH。

答案 1 :(得分:0)

我意识到你说Page_Load(),但我怀疑这会做你需要的。

Page.PreRender事件中,浏览控件:

/* inside Page_PreRender() handler...*/
if (user_options.filterBadWords == true)
{
    FilterControls(this);
}    

/* this does the real work*/
private void FilterControls(Control ctrl)
{
    foreach (Control c in ctrl.Controls)
    {
        if (c.GetType().ToString() == "System.Web.UI.WebControls.TextBox")
        {
            TextBox t = (TextBox)c;
            /* do your thing */
            t.Text = BadWordsFilter(t.Text);
        }
        if (c.HasControls())
            FilterControls(c);
    }
}

这是一个hack,它将帮助您解决当前的问题:重写TextBox控件最终是一个更好的解决方案。