2013-08-14 2 views
1

окружающей среды: .NET 3.5, C#, Sharepoint 2010кодировка символов с asp.net динамического текстового поля

Существующие функциональные возможности: У меня есть пользовательский элемент управления с текстовым полем поиска и кнопку поиска. Когда нажата кнопка отправки, наряду с результатами поиска, создается цепочка с ключевым словом поиска. При обратном вызове текстовое поле снова заполняется поисковым ключевым словом из querystring. Это работает хорошо.

Вопрос: Необходимо исправить скрипты с поперечной стороны. так же сделал html.encode и снова фильтр, чтобы избежать одиночной кавычки с & amp # 39; для значения текстового поля. но текстовое поле отображает значение, так как оно «' searchstring '».

Мне нужно показать только «Searchstring» пользователя, но значение в исходном коде должно быть & amp # 39; searchstring & amp # 39; для предотвращения уязвимости Cross Side Script.

(Примечание:.. Над текстом «& усилитель» на самом деле «&» не & усилитель # 39 Так как StackOverflow редактор преобразует его в одинарные кавычки, я заменил его & усилитель для чтения)

Если я пытался строя текстовое поле динамически на странице с помощью stringbuilder, я получаю то, что мне нужно, как я упоминал выше. например:

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» текстовое поле внутри PageLoad как,

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

Примечание: Если я создаю элемент управления текстового поля на Page_Init без метода StringBuilder записи , символ с кодировкой отображается в текстовом поле.

Любая помощь?

Благодаря Venkat

ответ

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 не обрабатывает это представление в этом элементе управления прямо сейчас. Таким образом, вы можете получить некоторые ошибки в зависимости от того, что вы пытаетесь выполнить. В этом процессе есть множество обучающих программ, которые помогут вам в этом процессе.

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

+0

Как я уже говорил в моем сообщении, строительство Динамический контроль, как вы предложили техника его подводит констатировала Issue я упомянул. – user2459457

+0

@ user2459457 Вы не указали, какой метод вы использовали ранее, вы просто сказали, что не с строковым конструктором. –

+0

Мой плохой. извините, я не упоминал об этом четко. Спасибо за ваш ответ, он не исправил проблему с отображением кодировки символов в текстовом поле. – user2459457