Skip to main content
 首页 » 编程设计

vb.net之使用 JQuery Mobile 的 asp 图像按钮单击事件

2024年02月13日12insus

我一直在使用 VB.NET 和 JQM 开发一个网站 - 一切都很顺利。

现在,我尝试使用以下标签包含一个标准图像按钮:

<asp:ImageButton ID="btnYear" runat="server" ImageUrl="~/images/buttons/year_btn.gif" /> 

并且在文件后面的 VB 代码中,有一个类似于以下内容的单击事件:

Private Sub btnYear_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles btnYear.Click     
    Session("TimeFrame") = "YEAR"     
    *do other code*  
End Sub 

当我单击图像按钮并跟踪代码时 - 文件触发后的代码中的页面事件中的所有代码(页面加载、页面预渲染等) - 但图像按钮的单击事件永远不会触发。

如果我用标准的 asp:Button 替换图像按钮并执行所有相同的操作 - 那么后面代码中的单击事件就会正常触发!是否无法在 JQM 页面中使用 ASP ImageButton 并在 VB 代码隐藏文件中保留单击事件?

编辑 非常感谢 andleer 的回复 - 但这给我的页面带来了一个新的场景(问题),也与这些 ImageButtons 相关。

我的 ImageButton 控件包含在用户控件中。我的页面是一个包含多个 ASPX 文件 <div data-role="page"> 其中的每个元素都有自己的 ID(“page1”、“page2”、“page3”等) - 遵循 JQM 多页面功能的标准用法。每个“页面”部分都包含一个包含图像按钮的用户控件实例。这一切都运行良好,但有一个问题 - 当用户从默认的“page1”导航到任何其他“页面”并单击其中一个图像按钮时,代码会触发,页面重新加载 - 并使用户返回默认值页面 - “第 1 页”。

这不好 - 我需要一种方法来允许用户触发按钮并重新加载页面并停留在他们正在查看的“页面”元素上 - JQM 使用 URL 中的哈希标签完成这些多个页面 - 所以我发现我添加到页面加载事件的一行代码如下:

`Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 处理 Me.Load

    Me.Form.Attributes("onsubmit") = "this.action+=top.location.hash;" 
 
End Sub` 

我最初在我的用户控件上使用单选按钮 - JQM 正在“换肤”,因此它们显示为按钮 - 通过 Page_Load 事件中的这一行,用户可以单击任何“页面”元素上的单选按钮,然后单选按钮后面的代码将触发,页面将重新加载,用户返回到他们单击的同一“页面”元素 - 不是用图像按钮替换单选按钮 - 当我将该行代码添加到 Page_Load 事件时, ImageButton 控件完全停止运行 - 当我单击其单击中的代码时,即使在后面的代码中也不会触发 - 也不会触发任何页面级事件,例如 Page_Load 或 Page_PreRender - 单击它们现在绝对不会执行任何操作...

对此有什么想法吗?

请您参考如下方法:

解决您问题第二部分的新答案:

我发现 asp.net Web 表单根本不适用于 jQuery Mobile 多页面方案。 Web 表单要求所有 Web 控件驻留在单个 <form /> 中需要跨越所有 jQuery Mobile(“虚拟”)页面的元素。这与 jQuery Mobile 需要 <form /> 直接冲突。每个子页面中的元素用于正确渲染和帖子包。

请考虑使用 MVC。