使用asp.net动态文本框进行字符编码

时间:2013-08-14 19:13:34

标签: asp.net dynamic-controls

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

现有功能:我有一个带有搜索文本框和搜索按钮的用户控件。点击提交按钮以及搜索结果时,会构建带有搜索关键字的查询字符串。在回发时,文本框再次使用查询字符串中的搜索关键字进行填充。这很好用。

问题:需要修复跨版脚本。所以html.encode也是一个过滤器,用& amp; amp;#39;对于文本框值。但是文本框显示的值就像“'searchingstring'”。

我只需向用户显示“Searchstring”,但源代码中的值应为& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp;防止跨侧脚本漏洞。

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

如果我尝试使用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();

但我需要检查pageload中的“mystring”文本框的值,如

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

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

任何帮助?

由于 Venkat

1 个答案:

答案 0 :(得分:0)

使用runat="server"在html中追加字符串不会使其成为服务器控件。你必须在后面的代码中动态添加你的控件,在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事件中获取Control:

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

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

txt.Text

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

Dynamically Create Controls in ASP.NET with Visual Basic .NET

TRULY UNDERSTANDING DYNAMIC CONTROLS (PART 1)

Add Controls to an ASP.NET Web Page Programmatically