Динамическая генерация идентификатора управления ContentPage - PullRequest
0 голосов
/ 31 марта 2012

Я застрял с этим генерацией динамического идентификатора элемента управления, если я помещаю свои элементы управления (скажем, Button) в ContentPage (который наследуется MasterPage) внутри <asp:Content></asp:Content>, когда страница отображается в браузере, то идентификатор элемента управления изменяетсяЯ прочитал статью ScottGu о 'clientIDMode' , и я подумал, что моя проблема окончена, поэтому я установил 'clientIDMode' внутри 'Web.Config'

<pages clientIDMode="Static"></pages>

Но проблема сохраняется, я могуt отсылает мои элементы управления из кода, подобного этому,

        //ctl00$Cntnt$Button1 name works but its dynamically created
       if (ScriptManager1.AsyncPostBackSourceElementID == "Button1")
        {
            Label1.Text = "Async PostBack occured @ " + DateTime.Now.ToLongTimeString();
        }

Разметка ASP.net:

<asp:Button ID="Button1" runat="server" Text="Refresh me" onclick="Button1_Click" />

Разметка на стороне браузера:

<input type="submit" name="ctl00$Cntnt$Button1" value="Refresh me" id="Button1" />

Q) Не могу ли я использовать только Id элементов управления, которые я указал в разметке (как будто у меня нет MasterPage)?

PS: В AsyncPostback я хочу выполнить определенные операции на основе определенной кнопки, которая создала AsyncPostback, для этого мне нужно проверить значение из AsyncPostBackSourceElementID, которое, к сожалению, возвращает измененный ControlID

1 Ответ

1 голос
/ 31 марта 2012

ClientIDMode не имеет значения, потому что AsyncPostBackSourceElementID фактически возвращает имя кнопки, а не идентификатор.Тем не менее, вы можете легко получить название кнопки через свойство UniqueID:

if (ScriptManager1.AsyncPostBackSourceElementID == Button1.UniqueID)
{
    //do whatever
}

Я думаю, вы неправильно понимаете цель ClientIDMode.Идентификаторы, которые генерирует ASP.NET, применяются к клиентской части, и в выделенном фрагменте кода вы все равно можете получить доступ к элементам управления по идентификаторам, назначенным им в разметке.

<asp:Panel ID="Panel1" runat="server">
    <asp:Label ID="Label1" runat="server" />
</asp:Panel>

Когда это отображается, уникальный идентификатор (ClientID) будет сгенерирован для каждого элемента управления с использованием комбинации назначенного вами идентификатора и идентификаторов любых восходящих контейнеров именования.В этом случае Panel1 является контейнером именования, поэтому сгенерированный идентификатор будет выглядеть следующим образом:

<span id="ctl00_Panel1_Label1"></span>

Однако в выделенном фрагменте кода вы все равно можете получить доступ к элементу управления с помощью исходного идентификатора, назначенного ему:

var labelText = Label1.Text;

Сгенерированный идентификатор вступает в действие только на стороне клиента, где, например, вам может понадобиться доступ к элементу управления из JavaScript;Вы могли бы затем ClientID найти его.

var labelText = document.getElementById("<%=Label1.ClientID%>").innerText;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...