2015-08-31 4 views
0

Я только начинаю использовать панели обновления в своих решениях, поэтому я медленно знакомлюсь с ними. У меня есть GridView, у которого есть кнопка удаления, связанная с каждой отображаемой строкой. Когда я нажимаю кнопку удаления, это событие OnClick должно отображать панель, которая действует как полумодальное окно подтверждения (сделанное как лайтбокс), чтобы удалить запись, связанную с соответствующей строкой. Однако, когда я нажимаю кнопку, панель не отображается, потому что все это находится в панели обновления. Прекрасно работает без панели обновленияКнопка Inside Gridview Inside Update Panel Не работает

Любые идеи?

Вот усеченная версия моего кода:

<script runat="server"> 
Protected Sub LinkButtonDelete_Click(ByVal Sender As Object, ByVal e As EventArgs) 
    PanelConfirmMessage.Visible = True 
    PanelConfirmLightBox.Visible = True 
End Sub 
'.... note there is other code that handles the delete ... 
</script> 

<html> 
<head"></head> 
<body> 
<form id="form1" runat="server"> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:GridView ID="GridView1" runat="server" DataSourceID="DataSourceGridView1"> 
       <Columns> 
        <asp:templatefield HeaderText="Name"> 
         <ItemTemplate><asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("MyFieldName") %>' /></ItemTemplate> 
        </asp:templatefield> 
        <asp:TemplateField HeaderText="Delete"> 
         <ItemTemplate><asp:LinkButton ID="LinkButtonDelete" runat="server" OnClick="LinkButtonDelete_Click"></asp:LinkButton></ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
      <asp:SqlDataSource ID="DataSourceGridView1" runat="server" ConnectionString="<%$ ConnectionStrings:MyString %>" SelectCommand="MySelectCommand" SelectCommandType="StoredProcedure"></asp:SqlDataSource> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <asp:Panel runat="server" ID="PanelConfirmMessage" Visible="false"> 
     <p>Are you sure you want to continue?</p> 
     <asp:Button runat="server" ID="ButtonYes" Text="Yes" OnClick="ButtonYes_Click" /> 
     <asp:Button runat="server" ID="ButtonNo" Text="No" OnClick="ButtonNo_Click" /> 
    </asp:Panel> 
    <asp:Panel runat="server" id="PanelConfirmLightBox" Visible="false"></asp:Panel> 
</form> 
</body> 
</html> 
+0

Вы имеете в виду, когда вы нажимаете на кнопку, все UpdatePanel изображении исчезнут? наряду с сеткой, кнопками и т. д.? – RelatedRhymes

+0

Нет. Там находится панель обновления. Все выглядит одинаково. Все, что я имел в виду, это то, что моя панель подтверждения не появляется. Когда вы нажимаете ссылку «Удалить», ничего не происходит, и страница остается как есть. Кнопка «Ссылка» не вызывает действие для отображения панели. Во всяком случае, я нашел ответ ниже. – ptownbro

ответ

0

Чтобы разместить обратно ваше GridView управления шаблоном поля с панели обновлений вы можете добавить элемент управления в сбор Trigger в коде на событии DataBind из пункт.

Так что попробуйте добавить этот OnDataBinding из LinkButton:

protected void PostBackBind_DataBinding(object sender, EventArgs e) 
{ 
    LinkButton lb = (LinkButton) sender; 
    ScriptManager sm = (ScriptManager)Page.FindControl("scriptmanagerId"); 
    sm.RegisterPostBackControl(lb); 
} 



<asp:ScriptManager ID="scriptmanagerId" runat="server"></asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:GridView ID="GridView1" runat="server"> 
       <Columns> 
        <asp:templatefield HeaderText="Name"> 
         <ItemTemplate><asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("name") %>' /></ItemTemplate> 
        </asp:templatefield> 
        <asp:TemplateField HeaderText="Delete"> 
         <ItemTemplate><asp:LinkButton ID="LinkButtonDelete" runat="server" Text="Delete" OnClick="LinkButtonDelete_Click" OnDataBinding="LinkButtonDelete_DataBinding"></asp:LinkButton></ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
      </asp:GridView> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
+0

Пробовал это уже. Поскольку это внутри GridView, это не сработает. ControlID не распознается как «LinkButtonDelete», потому что он находится в GridView. Я думаю, вы должны использовать имя элемента управления, как показано в html. И это имя не уникально. В любом случае вы не можете использовать идентификатор. – ptownbro

+0

Извините, я не узнал о GridView. Теперь я обновляю это по вашей проблеме. Вы можете попробовать один раз. Простой и легкий способ. –

0

Спасибо всем вам помочь. Мне был предоставлен ответ через кого-то другого. Ответ был прост. Все, что мне нужно было сделать, - это подтвердить подтверждение внутри панели обновления вместе со всем остальным.

укороченная версия с исправлением:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:GridView ID="GridView1"...> 
      <Columns>....</Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ...></asp:SqlDataSource> 

     <!--- THE CONFIRMATION PANELS INSIDE THE UPDATEPANEL AS SHOWN HERE ---> 

     <asp:Panel runat="server" ID="PanelConfirmMessage" Visible="false"> 
     ... 
     </asp:Panel> 
     <asp:Panel runat="server" id="PanelConfirmLightBox" Visible="false"></asp:Panel> 
    </ContentTemplate> 
</asp:UpdatePanel> 
Смежные вопросы