2011-07-06 5 views
8

Je dois référencer un contrôle dans mon application Web généré à l'aide d'une page maître. Le nom du contrôle dans le HTML devient quelque chose comme ceci "ctl00 $ MainContent $ ListBox1". Puis-je le faire en toute sécurité dans le code?Est-ce que ctl00 est une constante dans ASP NET?

string strName = "ctl00$MainContent$ListBox1"; 
if (Request.Form[strName] != null) 
{ 
String selectedLanguage = Request.Form[strName]; 
} 

PS. Je ne peux pas utiliser la propriété ClientID parce que ce code est appelé à partir de l'initialisation InitializeCulture().

Répondre

12

Vous pourriez, mais ce que je fais est que l'ID MasterPage dans mon Init():

protected void Page_Init(object sender, EventArgs e) 
{ 
    // this must be done in Page_Init or the controls 
    // will still use "ctl00_xxx", instead of "Mstr_xxx" 
    this.ID = "Mstr"; 
} 
+0

Mec, je me suis cogné la tête contre le mur toute la journée aujourd'hui et vous l'avez réparé avec 2 lignes de code. JE VOUS REMERCIE!!! – ahmd0

+0

Pas de problème du tout! J'ai été là ... –

2

ctl00 est l'ID de votre produit masterpage. Dans le code-behind, vous pouvez définir this.ID à tout ce que vous voulez et tout sous-contenu sera préfixé avec cet ID à la place. Le problème avec le code que vous avez ci-dessus est que vous utilisez une chaîne magique pour un ID de contrôle - vous devez faire attention car les contrôles sont déplacés dans les contrôles utilisateur et les pages maîtres sont imbriquées. Je ne sais pas pourquoi vous ne pouvez pas utiliser ListBox1.SelectedValue?

+0

> Je ne sais pas pourquoi vous ne pouvez pas utiliser ListBox1.SelectedValue? > PS. Je ne peux pas utiliser la propriété ClientID ** car ce code est appelé depuis InitializeCulture() override **. – ahmd0