环境:.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
答案 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