2013-08-14 2 views
1

Environnement: NET 3.5, C#, sharepoint 2010le codage des caractères avec asp.net textbox dynamique

fonctionnalité existante: J'ai un contrôle utilisateur avec une zone de texte de recherche et le bouton de recherche. Lorsque le bouton Soumettre est atteint, avec les résultats de recherche, une chaîne de requête avec un mot-clé de recherche est créée. Lors de la publication, la zone de texte est à nouveau remplie avec le mot clé de recherche de la chaîne de requête. Cela fonctionne bien.

Problème: Vous devez corriger les scripts latéraux. a fait un html.encode et encore un filtre pour échapper une citation unique avec & amp # 39; pour la valeur de la zone de texte. mais la zone de texte affiche la valeur comme c'est "' searchingstring '".

Je dois montrer à l'utilisateur seulement "Searchstring", mais la valeur dans le code source doit être & amp # 39; searchingstring & amp # 39; pour empêcher la vulnérabilité de script de côté croisé.

(Note:.. Au-dessus du texte "& Ampère" est en fait "&" pas & amp # 39 Depuis éditeur stackoverflow il se transforme en guillemets simples, je l'ai remplacé par & Ampères pour la lecture)

Si j'ai essayé construire la zone de texte dynamiquement sur pageinit en utilisant stringbuilder, je reçois ce dont j'avais besoin comme je l'ai mentionné ci-dessus. par exemple:

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(); 

Mais je dois vérifier la valeur de la zone de texte « mystring » à l'intérieur pageload comme,

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

Note: Si je crée le contrôle de zone de texte sur Page_Init sans une méthode d'écriture stringbuilder , le caractère avec codage s'affiche dans la zone de texte.

Toute aide?

Merci Venkat

Répondre

0

Annexer une chaîne dans votre code html, avec runat="server" ne fait pas un contrôle serveur. Vous devrez ajouter votre contrôle dynamique de code derrière, dans Page_Init comme ceci:

Ajouter un contrôle PlaceHolder:

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

Ensuite ce code dans votre événement Page_Init pour créer le contrôle TextBox:

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

Pour obtenir le contrôle de l'événement Page_Load:

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

maintenant vous pouvez accéder à la propriété Text comme vous le feriez avec tout autre contrôle:

txt.Text 

Couple de choses. Ajouter dynamiquement des contrôles peut parfois être une expérience pénible. Asp.net ne gère pas le viewstate de ce contrôle pour le moment. Ainsi, vous pourriez recevoir des erreurs en fonction de ce que vous essayez d'accomplir. Il y a des tonnes de tutoriels en ligne qui vous aideront dans ce processus.

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

Comme je l'ai mentionné dans mon post, la construction d'un contrôle dynamique de la façon dont vous suggérez na pas résolu le problème je l'ai mentionné. – user2459457

+0

@ user2459457 Vous n'avez pas mentionné la méthode que vous utilisiez précédemment, vous venez de dire non avec un stringbuilder. –

+0

Mon mauvais. Désolé, je n'ai pas mentionné cela clairement. Merci pour votre réponse, il n'a pas résolu le problème sur l'affichage de codage de caractères sur la zone de texte. – user2459457