2009-10-08 6 views
0

Existe-t-il des moyens/possibilités de remplacer une chaîne par un UserControl?Comment une chaîne peut-elle transformer un UserControl?

indépendamment de LoadControl et de l'ajouter à un autre contrôle comme une page ou un espace réservé.

La raison en est qu'un utilisateur ajoute un contenu sur la page et met une chaîne comme {uc: test} et je voudrais analyser ce texte et remplacer {uc: test} par un UserControl.

en d'autres termes; L'entrée utilisateur sera "bla bla bla {uc: test} bla bla", quand je le récupère de la base de données comment puis-je injecter usercontrol et le remplacer par {uc: test}

merci.

Répondre

1

Essayez la méthode LoadControl pour charger dynamiquement les contrôles utilisateur et les ajouter à votre page pendant la publication.

Control someControl = LoadControl("~/SomeControl.ascx"); 

Vous pouvez ... Ajoutez à votre collection de contrôle de la page:

 this.Page.Controls.Add(someControl); 

Ou ... Ajouter à la collection de contrôle d'un autre contrôle

 someExistingPlaceHolder.Controls.Add(someControl); 

Que diriez-vous d'obtenir les étiquettes comme ceci utilisant regex

List<string> fields = new List<string>(); 
foreach(Match match in Regex.Matches(str, @"\{([^\}]*)\}")) { 
    fields.Add(match.Groups[1].Value); 
} 
+0

l'entrée de l'utilisateur sera "bla bla bla {uc: test} bla bla", quand je le récupère de la base de données comment puis-je injecter usercontrol et le remplacer par {uc: test} – Cem

+1

Utilisation de la manipulation de chaînes pour détecter {et} pour commencer, donc string.IndexOf() pour obtenir des positions pour le tag réservé alors vous pouvez ajouter "bla bla bla" comme un contrôle littéral qui va afficher comme du texte, ajouter le contrôle uc: test, ajouter "bla bla" comme un littéral – CRice

+0

Après avoir obtenu la chaîne, vous pouvez utiliser stringName.Replace ("{uc: test}", "_userControlHere_"); –

0

Si vous voulez tous de l'entrée utilisateur à respecter, y compris les références de contrôle qu'ils ont inclus, utilisez ParseControl:

string markup = input.Replace("{","<").Replace("}",">"); 
Control control = this.Page.ParseControl(markup); 

this.Page.Controls.Add(control); 

Cela va créer une nouvelle Control qui représente tout le texte (« bla bla ») en tant que contrôle Literal enfant, ainsi que créer de nouvelles instances de <uc:test> en tant que contrôles enfants imbriqués.

+0

ParseControl (@ "bla bla bla"): test id = "" xx "" runat = "" serveur "" /> bla bla "); ... comment enregistrer le contrôle uc: test pour qu'il ne soit pas un tag de serveur inconnu? J'ai essayé <% @ Register TagPrefix ...> dans un exemple mais pas de chance. – CRice

+0

Lorsque enregistré dans web.config le contrôle est trouvé mais ne rend pas ... le texte environnant ne – CRice

+0

@Boon avez-vous essayé d'ajouter ce contrôle particulier à la page explicitement et voir si cela fonctionne correctement? –

Questions connexes