在更新面板内部时,按钮单击gridview不会触发

时间:2014-05-02 06:48:31

标签: c# asp.net ajax gridview

<asp:Timer ID="timer1" runat="server" Interval="1000" OnTick="Timer1_Tick" />
<asp:UpdatePanel runat="server" id="pnlUpdate">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="timer1" eventname="Tick"/>
    </Triggers>
    <ContentTemplate>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CssClass="table table-hover table-condensed" 
            GridLines="None" AllowPaging="true" PageSize="20"
            OnPageIndexChanging="GridView1_PageIndexChanging">
        <Columns>
            <asp:BoundField ItemStyle-Width="50%" DataField="Story" HeaderText="Story"/>
            <asp:BoundField ItemStyle-Width="15%" ItemStyle-Wrap="false" DataField="AssignedTo" HeaderText="Assigned To"/>
            <asp:BoundField ItemStyle-Width="15%" ItemStyle-Wrap="false" DataField="Status" HeaderText="Status"/>
            <asp:BoundField ItemStyle-Width="15%" ItemStyle-Wrap="false" DataField="Started" HeaderText="Started"/>
            <asp:BoundField ItemStyle-Width="5%" ItemStyle-Wrap="false" DataField="Updated" HeaderText="Updated"/>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Button ID="Buttonid" runat="server" CommandName="ViewItem" Text="View"  BorderStyle="None" BackColor="White" 
                        OnClick="Button_click_event"></asp:Button>   
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
        <RowStyle CssClass="cursor-pointer" />
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>
当我有更新面板时,

Button_click_event不会被激活,但是当它不在更新面板中时它会起作用。

4 个答案:

答案 0 :(得分:0)

您的更新面板看起来像

<asp:UpdatePanel ID="upWall" runat="server" ChildrenAsTriggers="true" UpdateMode="conditional">
 <ContentTemplate>
     ....
 </ContentTemplate>
<Triggers>
 <asp:AsyncPostBackTrigger ControlID="Buttonid" EventName="Click"/>
</Triggers>

答案 1 :(得分:0)

尝试将UpdateMode="Conditional"ChildrenAsTriggers="False"设置为UpdatePanel ..

 <Triggers>
            <asp:AsyncPostBackTrigger ControlID="GridView1" />
        </Triggers>

同时删除触发器的EventName属性,然后重试..

答案 2 :(得分:0)

删除按钮的属性单击CommandName =“ViewItem” 然后尝试,如果不工作也添加按钮UseSubmitBehaviour = true

的属性

答案 3 :(得分:0)

你可以通过各种方式解决这个问题。一种方法是在代码中的rowdatabound后面添加一个可以处理onclick事件的控件,例如div,然后为你的可点击控件添加一个回发处理程序:

HtmlGenericControl div = (HtmlGenericControl)e.Row.FindControl("Buttonid");
div.Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(GridView1, "Select$" + e.Row.RowIndex.ToString()));

或者,我实施了另一种适合我的解决方法:

在gridview外放置一个按钮,但在Updatepanel内。此外,添加一个hiddencontrol,您将在其中存储单击的rowindex。然后在模板字段中添加一个“可点击的div”(您可以在其中为文本添加标签),即调用javascript。像这样的东西(你可以添加一个显示无样式来隐藏按钮)。:

  <asp:Button id="Buttonid" runat="server" OnClick="Button_click_event" />
  <asp:HiddenField ID="hdnRowClicked" runat="server" Value="" />
    
  <itemtemplate>
    <div onclick="javascript:rowClicked('<%= Buttonid.ClientID %>','<%= hdnRowClicked.ClientID %>', this);">
      <asp:Label ID="lblImgDetail" runat="server" Text="+"></asp:Label>    
    </div>
  </itemtemplate>

然后在javascript函数中,设置rowindex并调用按钮进行回发:

    function rowClicked(btnId, hdnRowSelected, lnk) {
        var rowIndex = lnk.parentNode.parentNode.rowIndex - 1;

        $('#' + hdnRowSelected).val(rowIndex);
        $('#' + btnId).click();
    }