【问题标题】:Update panel not working inside Gridview - Asp.Net/VB.Net更新面板在 Gridview 中不起作用 - Asp.Net/VB.Net
【发布时间】:2020-07-30 21:52:27
【问题描述】:

当我单击图像按钮“imgPaymentMethod”时,我需要代码来更改图像按钮的 ImageUrl。但是,单击时没有任何反应。我也尝试将整个 gridview 放在更新面板中,但随后出现此错误:

找不到 ID 为“imgPaymentMethod”的控件 在 UpdatePanel 'upPnlControls' 中触发

前端..

<asp:GridView ID="gdvItems" runat="server" AutoGenerateColumns="False" 
                    DataKeyNames="fileID" DataSourceID="DSUploadedItems" CssClass="mGrid" 
                    AlternatingRowStyle-CssClass="alt">
    <AlternatingRowStyle CssClass="alt"></AlternatingRowStyle>
    <Columns>
        <asp:TemplateField visible="true" HeaderText="Price">
            <ItemTemplate>    
                <asp:DropDownList ID="ddlBuyPrice" runat="server" AutoPostBack="True" Font-Size="11px" Height="22px" OnSelectedIndexChanged="ddlBuyPrice_SelectedIndexChanged" SelectedValue='<%# Bind("buyPrice")%>'>
                     <asp:ListItem Value="0.00">Select:</asp:ListItem>
                </asp:DropDownList>
                <asp:LinkButton visible="false" ID="lnkPaymentMethod" runat="server" CausesValidation="False"
                    Text='<%# Bind("acceptPaypal")%>' > /></asp:LinkButton>
                <br /><br />
                <asp:Label ID="lblSoldStatus" visible="false" runat="server" CausesValidation="False" Text='<%# Bind("sold") %>' />
                <asp:Image ID="imgSoldStatus" alt="Sold Status" runat="server" width="100px" ImageUrl="~/files/images/icons/iconSold.png" />
                <br />

                <asp:UpdatePanel ID="upPnlControls" style="margin-top:0px;" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
                    <Triggers>
                        <asp:AsyncPostBackTrigger controlid="imgPaymentMethod" eventname="Click" />
                    </Triggers>
                    <ContentTemplate>
                        <asp:ImageButton visible="true" ID="imgPaymentMethod" runat="server" CausesValidation="False" width="50px" onclick="lnkPaymentMethod_Click"></asp:ImageButton>
                    </ContentTemplate>
                </asp:UpdatePanel>

                <br />
                <asp:Label ID="lblDateBought" runat="server" CausesValidation="False" Text='<%# Bind("dateBought") %>' />
                <asp:LinkButton ID="lnkMarkAsSold" runat="server"  OnClick="markAsSold_Click" Text="Mark As Sold" Visible="true" ></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

VB 代码..

Protected Sub lnkpaymentMethod_Click(sender As Object, e As System.EventArgs)
    Dim imgPaymentMethod As ImageButton = CType(sender, ImageButton)
    Dim currentRow As GridViewRow = DirectCast(imgPaymentMethod.Parent.Parent, GridViewRow)

    If imgPaymentMethod.ImageUrl="~/files/images/icons/paypalIcon.gif" Then
        imgPaymentMethod.ImageUrl="~/files/images/icons/cashIcon.gif"
    Else
        imgPaymentMethod.ImageUrl="~/files/images/icons/paypalIcon.gif"
    End If

End Sub

【问题讨论】:

  • 我认为错字问题onclick="lnkPaymentMethod_Click" 应该是onclick="lnkpaymentMethod_Click",因为您的方法名称是lnkpaymentMethod_Click
  • 我已经删除了 IF 语句,只是简单地输入了 imgPaymentMethod.ImageUrl="files/images/icons/testImage.png" 但仍然没有。 @SelimYıldız 我已经更正了大写的“P”,但没有运气。
  • 所以问题是当你点击imgPaymentMethod按钮时lnkpaymentMethod_Click方法没有被触发,对吧?
  • 我刚刚尝试在其中放置一些断点,但看起来它在这一行出现故障: Dim currentRow As GridViewRow = DirectCast(imgPaymentMethod.Parent.Parent, GridViewRow)
  • 为什么需要currentRow 好像没用过?

标签: asp.net vb.net gridview updatepanel


【解决方案1】:

经过我们在 cmets 中的讨论,如果我理解正确的话,这里的问题是这一行:

Dim currentRow As GridViewRow = DirectCast(imgPaymentMethod.Parent.Parent, GridViewRow)

如果您想通过imgPaymentMethod 按钮获取网格视图行,您需要使用NamingContainer 而不是Parent,如下所示:

Dim currentRow As GridViewRow = DirectCast(imgPaymentMethod.NamingContainer, GridViewRow)

【讨论】:

  • 非常感谢。那工作得很好。非常感谢塞利姆
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多