2013-06-04 2 views
3

У меня возникли проблемы с созданием триггеров для элементов внутри ретранслятора. Я хотел бы Linkbutton контроля, чтобы вызвать постбэк изнутри панели обновления, у меня есть триггер, определенный в разметке для Button управления, который работает отлично:Несколько триггеров панели обновления внутри репитера

<Triggers> 
    <asp:PostBackTrigger ControlID="button" /> 
</Triggers> 

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

//Inside repeater itemdatabound... 
var trigger = new PostBackTrigger(); 
trigger.ControlID = linkButton.UniqueID; 
updatepanel.Triggers.Add(trigger); 

при выполнении этого кода я получаю сообщение об ошибке:

A control with ID 'ctl00$content$repeater$ctl01$linkButton' could not be found for the trigger in UpdatePanel 'updatepanel'.

Как я могу динамически добавлять триггеры для каждого из моих LinkButtons?

ответ

7

Решено. Я предполагаю, что он не работает в моем OP, потому что элементы управления ретранслятора не отображаются непосредственно на панели обновления.

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

Однако, я считаю, что чистое решение является регистрация LinkButton управления в качестве контроля обратной передачи с помощью ScriptManager:

//Create triggers for each 'remove' button 
ScriptManager scriptManager = ScriptManager.GetCurrent(Page); 
if (scriptManager != null) 
{ 
    scriptManager .RegisterPostBackControl(linkbutton); 
} 

В повторителей OnItemDataBound случае, решить ее.

0

Как мне кажется, для этого можно использовать идентификатор clientID, а не свойство uniqueID.

+0

Я уже пробовал с этим, он дает тот же результат, к сожалению, – DGibbs

+0

Ответил это сам в случае, если вы были заинтересованы. Спасибо всем, хотя – DGibbs

0

Аккуратные решение будет:

protected void MyRepeater_OnItemCreated(object sender, RepeaterItemEventArgs e) 
    { 
     //Inside ItemCreatedEvent 
     ScriptManager scriptMan = ScriptManager.GetCurrent(this); 
     LinkButton btn = e.Item.FindControl("btnSubmit") as LinkButton; 
     if (btn != null) 
     { 
      btn.Click += btnSubmit_Click; 
      scriptMan.RegisterAsyncPostBackControl(btn); 
     } 
    } 

This is the source thread

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