2013-05-29 4 views
0

Я разрабатываю веб-сайт ASP.NET с бэкэнд C#. У меня возникла проблема с установкой события onclick для кнопок, которые вложены внутри как в loginview, так и в ретранслятор. Код отлично работает для отображения всех других данных (анонимный вид отображает только сообщение об ошибке), но прямо сейчас кнопки просто перенаправляются на одну страницу и удаляют ретранслятор и все содержимое, тогда как они должны запускать определенную функцию удаления , Повторитель, как сейчас, использует альтернативный шаблон. Если я удалю кнопки из вложенных элементов управления, они будут работать. Я пробовал это с помощью кнопок, кнопок ссылок и кнопок изображения. Я бы предпочел использовать последнее, если это возможно. Можно ли назначить Onclick этим кнопкам, если они вложены так? Если нет, какой подход следует использовать?Кнопка ASP.NET OnClick внутри Repeater и LoginView

<asp:LoginView ID="LoginLinksView" runat="server" EnableViewState="false"> 
<AnonymousTemplate> 
    <asp:Label ID="errorlabel" runat="server"></asp:Label> 
</AnonymousTemplate> 
<LoggedInTemplate> 
    <asp:Repeater id="Repeater" runat="server" > 
    <HeaderTemplate> 
    <table cellspacing="0" cellpadding="0"> 
    <thead></thead> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <tr class="Repeaterrow"> 
    <!--Additional code here--> 

    <asp:ImageButton ID="delbutton" runat="server" ImageUrl= 
     "~/Images/delete.png" Onclick="DeleteOnClick"/>   
    </tr> 
    </ItemTemplate> 

    <AlternatingItemTemplate> 
    <tr class="Repeaterrow"> 
    <!--Additional code here--> 

    <asp:ImageButton ID="delbutton" runat="server" ImageUrl= 
     "~/Images/delete.png" Onclick="DeleteOnClick"/>    
    </tr> 
    </AlternatingItemTemplate> 

    <FooterTemplate> 
    </table> 
    </FooterTemplate> 

    </asp:Repeater> 
</LoggedInTemplate> 
</asp:LoginView> 
+0

Попробуйте удалить шаблон переменного элемента в настоящее время, чтобы увидеть, если он работает. Обратите внимание, что у вас есть проблема с синтаксисом в OnClick сразу после первой кнопки. –

+0

Просто опечатка ... спасибо. То же самое происходит без чередующегося шаблона. Он просто возвращается к текущей странице, но не отображает повторитель или что-то еще. Неважно, что находится в блоке OnClick. –

ответ

1

Вот проблемы с вашим подходом

1- Вопросы кнопки Postback, как это должно быть. Но вам нужно указать CommandArgument для определения «ключа» или строки, для которой вы его обрабатываете.

2- Re Свяжите ваш ретранслятор с источником. Ниже приведен пример кода для вас.

protected void Page_Load(object sender, EventArgs e) 
{ 
    BindRepeater(); 
} 

private void BindRepeater() 
{ 
    List<int> items = new List<int>(); 
    for (int i = 0; i < 10; i++) 
    { 
     items.Add(i); 
    } 
    Repeater.DataSource = items; 
    Repeater.DataBind(); 
} 
protected void DeleteOnClick(object sender, EventArgs e) 
{ 
    ImageButton delbutton = (sender as ImageButton); 
    //1- call your method with passing in delbutton.CommandArgument - it will give you key/ whatever you like 
    //2- Rebind the Repeater here and that will bind controls again... 
    BindRepeater(); 
} 
protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    ImageButton delbutton = (sender as RepeaterItem).FindControl("delbutton") as ImageButton; 
    if (delbutton != null) 
    { 
     delbutton.CommandArgument = (sender as RepeaterItem).ItemIndex.ToString(); 
    } 
} 

и ASPX определение Repeater сменится на

Спасибо, Риз

+0

Изменить ретранслятор на этот ​​ –

+0

Хорошо, у меня уже есть привязка ретранслятора, и все настроено так же, как и у вас здесь. Вы говорите, чтобы вызвать метод с передачей его в delbutton.CommandArgument ... Если метод удаления, который в конечном итоге вызывается в исходном событии onclick, определяется как deleteRow (string itemnumber, string itemdpartment), каков будет синтаксис для передачи этого метод к аргументу команды? Кроме того, мне нужно указать commandname или commandargument в тегах asp: ImageButton в разметке? –

+0

@BigEMPin Вы можете передать только CommandArgument и объединить данные как нечто вроде itemnumber + "," + itemdepartment в нем. И чем на стороне сервера вы можете разбить его, чтобы получить их и передать в свое уже сообщение. –

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