【问题标题】:Why is Code Once Triggered by an ASP:ImageButton Click not Triggered为什么代码一旦被 ASP 触发:ImageButton Click 没有被触发
【发布时间】:2013-09-30 13:17:48
【问题描述】:

我有一个与另一个问题中描述的问题类似的问题:aspnet webforms disable button on submit。在我添加 jQuery 和 jQuery mobile 之前,我的 ASP.NET Web 窗体站点运行良好。使用 NuGet 安装这些包后,我的图像按钮的代码将被忽略。在我设置UseSubmitBehavior="true" 之前,一个简单的按钮与图像按钮有类似的问题。禁用 jQuery Mobile 足以重新启用按钮功能。还有一个奇怪的问题是 IE10 的“查看源代码”返回上一页的标记,而开发人员菜单显示实际的 XHTML——我不知道这是否相关。

我的代码通常应该在单击图像按钮 Protected Sub BTNtoggleHole_Click(sender As Object, e As ImageClickEventArgs) Handles BTNtoggleHole.Click 后运行,但它拒绝了,所以我强制它在 Public Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load 中运行。我缺少一些页面生命周期的东西吗?

以下是不再触发任何服务器端代码的按钮:

<asp:ImageButton ID="BTNtoggleHole" runat="server" Style="float: right;" ImageUrl="~/Images/Buttons/Handicaps/9-hole-toggle.png" CausesValidation="False" ClientIDMode="Inherit" AlternateText="18/9 hole toggle" />

无论 jQuery 是否被注释掉、不存在或禁用,单击该按钮都会导致回发。

【问题讨论】:

  • 点击它会导致回发吗?该回发的请求值在更改前后有何不同?您是否使用了任何修改客户端代码的 jQuery 代码?
  • 您所说的“添加 jQuery 和 jQuery mobile”是什么意思,是指单纯的脚本引用还是实际的脚本逻辑?如果合乎逻辑,请发布。
  • @David 我在 ImageButton 中添加了 data-role="none"。尽管此属性应该禁用该按钮的任何 jQuery/JavaScript,但它不会改变任何内容 - BTNtoggleHole_Click 方法永远不会被调用。其他元素确实使用 jQuery Mobile 的数据角色,例如可折叠。另外,是的,该按钮会导致回发。
  • 我会看看该 ImageButton 呈现的 HTML 之间的区别(使用和不使用 jQuery)。听起来您使用 jQuery 的任何内容都在覆盖 ASP.NET 用于导致 PostBack 的内容。
  • @KarlAnderson 我在母版页中添加了脚本引用。禁用所有脚本引用会启用 BTNtoggleHole_Click 方法。我不使用自定义脚本,也不修改 jQuery 的逻辑,但我确实使用了正常的数据角色,例如可折叠。唯一使用 jQuery 的父元素是 data-role="content" 的 div 和 data-role="page" 的 body。注释掉脚本引用会启用按钮的方法。

标签: asp.net vb.net mobile jquery server-sent-events


【解决方案1】:

我遇到了与 LinkBut​​tons 类似的问题。事实证明,某些移动浏览器和控件的 JavaScript 处理方式存在问题。您可以为某些浏览器设置 ClientTarget="uplevel" 来解决问题。我在我的页面的基类中添加了以下内容,所以要直截了当:

    ' HACK: This is needed to get LinkButtons working in Chrome for Mobile (on iOS)
    ' This has to be in the page and cannot be in the masterpage or control.
    ' https://stackoverflow.com/questions/11591776/chrome-on-ipad-not-working-with-asp-net-4
    Protected Overrides Sub OnPreInit(ByVal e As System.EventArgs)
        If Request.UserAgent IsNot Nothing AndAlso _
            (Request.UserAgent.IndexOf("AppleWebKit") > -1 OrElse _
             Request.UserAgent.IndexOf("chrome") > -1 OrElse _
             Request.UserAgent.IndexOf("crios") > -1) Then
            Me.ClientTarget = "uplevel"
        End If
        MyBase.OnPreInit(e)
    End Sub

同样,这对我来说适用于 LinKButtons,但 ImageButton 可能非常相似。有关详细信息,请参阅此 SO 问题:Chrome on iPad not working with ASP.NET 4

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多