2013-09-20 2 views
0

мне нужно сделать в WebForms этого LinkButton в __doPostBack:Как получить идентификатор на стороне сервера UserControl?

<asp:LinkButton ID="AggiungiSocial" runat="server" onclick="cmdAggregaSocial_Click">Link</asp:LinkButton> 

Я вижу, что процесс .NET это как:

javascript:__doPostBack('ctl00$ContentPlaceHolder1$Dashboard1$RepeaterSocials$ctl00$AggiungiSocial','') 

так что мне нужно javascript:__doPostBack('ctl00$ContentPlaceHolder1$Dashboard1$RepeaterSocials$ctl00$AggiungiSocial','').

Но оказывается, идентификатор вместо этого ContentPlaceHolder1_Dashboard1_RepeaterSocials_AggiungiSocial_0

Так что мне нужно сделать Javascript заменить/синтаксический разбор этого ID или есть способ, чтобы получить это «__doPostBack» UserControl идентификатор ли?

Такие, как:

var ServerIDUserControl = link.attr('href').replace("javascript:__doPostBack(", "").replace("','')", ""); 

(который ужасно IMO).

+0

Обычно я вызываю функцию __doPostBack из кода позади –

+0

, что вам нужно, это UniqueID. См. Мой ответ ниже. – Ovidiu

ответ

1

(Возможно, в зависимости от используемой версии (ASP) .NET) значение атрибута name будет содержать строку, которую вы ищете, в отличие от id, сделанной для идентификации. Пример из 3.5 сайта здесь на работе выглядит следующим образом для Button:

<input type="submit" 
    name="ctl00$cph_main$ctl00$PerformSearch" 
    id="ctl00_cph_main_ctl00_PerformSearch"> 

Я parenthesise первой части просто потому, что я должен признать свое невежество относительно того, когда/почему это произошло - я помню время, когда это это не так, и это может быть либо вещь, либо более 3.5+, либо настроенная вещь.

В противном случае вы можете использовать встроенный синтаксис сценария на стороне сервера для вывода control.UniqueID в соответствующем месте.

+0

Я на .NET 4, я не вижу никакого атрибута имени? – markzzz

+0

Тогда вы могли бы использовать свойство 'ClientID', см. Мое обновление. –

+0

ClientID отличается от имени. Мне нужно вызвать допостбек помнить? Я думаю, вы имеете в виду UniqueID? – markzzz

0

Чтобы получить идентификатор элемента управления, отправленного как __EVENTTARGET во время обратной передачи, вам необходимо использовать UniqueID property of Control. В вашем случае:

javascript:__doPostBack('<%= AggiungiSocial.UniqueID %>', ''); 

Однако из вашего примера я вижу, что ваш контроль вложен в ретранслятор называется RepeaterSocials. В этом случае ваш код может выглядеть так:

javascript:__doPostBack('<%= RepeaterSocials.Items[0].FindControl("AggiungiSocial").UniqueID %>', ''); 

Но мой совет - не использовать этот подход. Вместо этого вы можете захватить событие Repeater.ItemCommand и посмотреть, какая кнопка была нажата внутри репитера.

+0

это помечено в очереди lqp. Не могли бы вы объяснить, что этот ответ делает для решения вопроса OP? Или иначе добавить вещество, которое может вынести в качестве ответа? –

+0

@GarryVass вопрос был «Мне нужно сделать __doPostBack в WebForms этого LinkButton:», поэтому я предоставил код для него.Во всяком случае, я изменил свой ответ и добавил немного вещества. – Ovidiu

+0

Весело хорошо, спасибо за помощь –

Смежные вопросы