Является ли ctl00 константой в ASP NET? - PullRequest
8 голосов
/ 06 июля 2011

Мне нужно сослаться на элемент управления в моем веб-приложении, созданный с использованием главной страницы.Имя элемента управления в HTML становится примерно таким: «ctl00 $ MainContent $ ListBox1».Могу ли я безопасно сделать это в коде?

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

PS.Я не могу использовать свойство ClientID, потому что этот код вызывается из переопределения InitializeCulture ().

Ответы [ 2 ]

12 голосов
/ 06 июля 2011

Можно, но я устанавливаю идентификатор MasterPage в моем 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"; 
}
2 голосов
/ 06 июля 2011

ctl00 - это сгенерированный идентификатор вашей главной страницы. В выделенном фрагменте кода вы можете установить для this.ID все, что захотите, и к любому субконтенту вместо этого будет добавлен префикс ID.

Проблема с кодом, который у вас есть выше, заключается в том, что вы полагаетесь на волшебную строку для идентификатора элемента управления - вы должны быть осторожны с этим, поскольку элементы управления перемещаются в пользовательские элементы управления и главные страницы становятся вложенными. Я не уверен, почему вы не можете использовать ListBox1.SelectedValue?

...