Je crée un contrôle basé sur ScriptControl, et je suis redéfinissant la méthode Render
comme ceci:Assurer attribut d'identification unique pour les éléments au sein ScriptControl
protected override void Render(HtmlTextWriter writer)
{
RenderBeginTag(writer);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write("This is a test.");
writer.RenderEndTag();
RenderEndTag(writer);
}
Ma question est, si je veux attribuer le div un attribut ID et qu'il soit unique sur la page, même s'il y a plusieurs instances de mon contrôle?
J'ai vu le code d'autres personnes qui fait cela:
writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID + "_divTest");
Cela permettra d'éviter les conflits de noms entre les instances de mon contrôle, mais si je l'ai déjà créé un div ailleurs sur la page qui a par hasard le même ID?
J'ai également entendu parler de l'implémentation de INamingContainer. Est-ce que cela s'appliquerait ici? Comment pourrais-je l'utiliser?
MISE À JOUR:
J'ai travaillé autour en surchargeant CreateChildControls
et l'ajout de contrôles réels, par opposition à rendre HTML directement. Dans ce cas, INamingContainer fait son travail. Cependant, je suis toujours curieux de savoir s'il existe un moyen de résoudre mon problème d'origine (ID uniques pour les éléments rendus directement).
I mis en œuvre INamingContainer et essayé d'ajouter un attribut ID: writer.AddAttribute (HtmlTextWriterAttribute.Id, "divTest"); Mais lorsque j'ai instancié deux de mes contrôles, le div avait le même ID dans les deux. Peut-être que c'est parce que la div n'est pas un contrôle des enfants. MSDN indique "tous les attributs d'ID de contrôle enfant sont garantis être uniques." –
Comment instanciez-vous? Si j'ai deux zones de texte sur la même page avec le même identifiant, ce sera un conflit de nommage. Si j'ai une texbox sur la page avec ID TextBox1 et un dans un contrôle utilisateur imbriqué (WebUserControl1) avec l'ID TextBox1, les identifiants générés sont garantis être uniques - TextBox1 et WebUserControl1_TextBox1 –
J'ai ajouté deux de mes ScriptControls avec des ID différents à une page utiliser le concepteur (glisser-déposer). Les divs rendus dans chacun sortent avec le même ID.Le problème est que je n'ajoute pas de contrôle enfant à un contrôle utilisateur; Je rends manuellement un div dans un contrôle serveur en utilisant un TextWriter. –