【问题标题】:ImageButton not hitting codebind method, but does if replaced with LinkButtonImageButton 没有命中 codebind 方法,但如果替换为 LinkBut​​ton
【发布时间】:2009-11-12 23:33:21
【问题描述】:

我在 radgridview 列内构建了一个 ImageButton。定义如下。

<asp:ImageButton ID="ImageButton_DeleteRun" ImageUrl="~/Assets/Images/Misc/delete.png"
runat="server" OnClick="QueryDelete" CommandName="QueryDelete" 
CommandArgument='<%# DataBinder.Eval(Container,"DataItem.QueryGuid") %>'
Width="10" Height="10" />

它正确加载。当我点击它时,我希望点击以下代码隐藏方法:

protected void QueryDelete(object sender, EventArgs e)
{
/* A bunch of code*/
}

它永远不会到达那里。更令人沮丧的是,如果我将 ImageButton 替换为

<asp:LinkButton ID="ImageButton_DeleteRun" Text="X"
runat="server" OnClick="QueryDelete" CommandName="QueryDelete" 
CommandArgument='<%# DataBinder.Eval(Container,"DataItem.QueryGuid") %>'/>

完美运行。 ImageButton 有问题吗?我错过了什么吗?

编辑 - 新信息

基本上在渲染图片按钮的时候,是没有href的。

奇怪--

<input type="image" style="height: 10px; width: 10px; border-width: 0px;" src="../Assets/Images/Misc/delete.jpg"
id="ctl00_ctl00_ctl00_AllContent_MainContent_MainContent_controlPanelQueryHistory_saved_RadGridQueryHistory_ctl00_ctl04_ImageButton1"
name="ctl00$ctl00$ctl00$AllContent$MainContent$MainContent$controlPanelQueryHistory_saved$RadGridQueryHistory$ctl00$ctl04$ImageButton1"/>

<a
href="javascript:__doPostBack('ctl00$ctl00$ctl00$AllContent$MainContent$MainContent$controlPanelQueryHistory_saved$RadGridQueryHistory$ctl00$ctl04$ImageButton_DeleteRun','')"
id="ctl00_ctl00_ctl00_AllContent_MainContent_MainContent_controlPanelQueryHistory_saved_RadGridQueryHistory_ctl00_ctl04_ImageButton_DeleteRun">delete</a>

【问题讨论】:

    标签: asp.net asp.net-ajax asp.net-3.5 imagebutton


    【解决方案1】:

    作为一种变通方法,您可以尝试将图像包装在 LinkBut​​ton 中。

    <asp:LinkButton ID="ImageButton_DeleteRun" Text="X"
    runat="server" OnClick="QueryDelete" CommandName="QueryDelete" 
    CommandArgument='<%# DataBinder.Eval(Container,"DataItem.QueryGuid") %>'>
        <img src="~/Assets/Images/Misc/delete.png" /> 
    </asp:LinkButton>
    

    【讨论】:

      【解决方案2】:

      也许页面正在验证?如果是这样,请尝试将 CausesValidation=false 添加到 ImageButton。

      【讨论】:

        【解决方案3】:

        您可能想尝试将 OnClick 替换为 OnCommand 以查看是否可以解决问题。

        【讨论】:

        • 我认为这就是答案,它需要某个处理程序。
        • 这不是解决方案。使用 OnClick 只是意味着正在设置的 CommandArgument 不会发送到事件处理程序,因此毫无意义。
        • 也不行——我想我现在只能坚持使用 LinkBut​​ton :-(
        • 将处理程序的名称更改为与命令参数名称不同的其他名称,只是为了排除它...
        【解决方案4】:

        愚蠢的问题 - 但是 ImageUrl 渲染的是有效图像还是 red-x?

        【讨论】:

        • 这是一个有效的图像,这是我检查的第一件事,因为我知道 ImageURL 至少必须指定。
        • 试过使用非 PNG 的东西吗?
        【解决方案5】:

        将两种链接类型都放在页面中,然后在结果页面上“查看源代码”。这可能会给你一些关于正在发生的事情的线索。它可能会以 JavaScript 或 CSS 搞砸的方式呈现 ImageButton

        【讨论】:

          【解决方案6】:

          如何在 OnClick 中获取命令参数?你有一个 EventArgs。 OnCommand 处理程序具有包含 CommandName 和 CommandArguments 的 CommandEventArgs:

          protected void image_Command(object sender, CommandEventArgs e)
          {
          }
          

          使用 OnCommand 会很有意义。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-30
            • 2023-03-12
            • 1970-01-01
            • 1970-01-01
            • 2012-10-13
            相关资源
            最近更新 更多