1

环境:.net 3.5、c#、sharepoint 2010

现有功能:我有一个带有搜索文本框和搜索按钮的用户控件。当提交按钮被点击时,连同搜索结果,一个带有搜索关键字的查询字符串被构建。在回发时,文本框再次填充来自查询字符串的搜索关键字。这很好用。

问题:需要修复横向脚本。html.encode 和过滤器也是如此,用 ' 转义单引号。对于文本框值。但是文本框显示的值就像“'searchingstring'”一样。

我只需要向用户显示“Searchstring”,但源代码中的值应该是 'searchingstring' 防止跨端脚本漏洞。

(注意:上面的文字“&”实际上是“&”。不是&#39。由于stackoverflow编辑器将其转换为单引号,我将其替换为&以供阅读)

如果我尝试使用 stringbuilder 在 pageinit 上动态构建文本框,我将得到我需要的东西,如上所述。例如:

    StringBuilder sb = new StringBuilder();
    if (Request.QueryString["str"] != null)
        {

            string strName = Request.QueryString["str"].ToString();
            str_value = htmlCheckReturnData(strName ); //encoded string
            sb.Append("<INPUT type='TEXT' runat = 'server' id = 'mystring' value = '" + str_value + "' />");
            //    Response.Write(sb.ToString());

        }
        else
        {
            sb.Append("<INPUT type='TEXT' runat = 'server' id = 'mystring' value = '' />");
        }

        ltlSearch.Text = sb.ToString();

但我需要检查页面加载中“mystring”文本框的值,例如,

   if (!IsPostBack && !Page.IsAsync)
    {
      if (!string.IsNullOrEmpty(mystring.Value))  //NOT WORKING HOW TO GET the textbox value
      {
       //do something
      }
   }

注意:如果我在 page_init 上创建文本框控件而不使用 stringbuilder 写入方法,则带有编码的字符将显示在文本框上。

有什么帮助吗?

谢谢文卡特

4

1 回答 1

0

在您的 html 中附加一个字符串,runat="server"并不会使其成为服务器控件。您必须在 page_init 中从后面的代码中动态添加控件,如下所示:

添加PlaceHolder控件:

<asp:PlaceHolder runat="server" ID="myPlaceHolder">
</asp:PlaceHolder>

然后这段代码在你的Page_Init事件中创建TextBox控件:

protected void Page_Init(object sender, EventArgs e)
{
    TextBox txt = new TextBox();
    txt.ID = "myTxt";
    myPlaceHolder.Controls.Add(txt);
}

从 Page_Load 事件中获取控件:

TextBox txt = (TextBox)myPlaceHolder.FindControl("myTxt");

现在您可以Text像使用任何其他控件一样访问该属性:

txt.Text

几件事。动态添加控件有时可能是一种痛苦的体验。Asp.net 现在不处理这个控件的视图状态。因此,根据您要完成的工作,您可能会收到一些错误。网上有大量的教程可以帮助你完成这个过程。

使用 Visual Basic .NET 在 ASP.NET 中动态创建控件

真正了解动态控制(第 1 部分)

以编程方式将控件添加到 ASP.NET 网页

于 2013-08-14T19:29:01.287 回答