【发布时间】:2026-01-08 20:15:02
【问题描述】:
我正在寻求有关如何最好地封装此 HTML 标记和行为以进行广泛重用的建议。
我在给定的 .aspx 页面上开发了一些“上下文敏感”帮助的工作版本,该页面使用 jQuery 的 qTip2 插件(为了问题的完整性,在此处“挤压”):
$('a.myMore[title]').qtip({
content: { title: { button: true } }
, style: { classes: 'qtip-youtube myCustomClass' }
, position: { target: 'mouse', adjust: { x: 5, y: 5} }
, show: { effect: function() { $(this).fadeTo(500, 1); } }
, events:{hide:function(event, api) {if (event.originalEvent.type !== 'click') return false;}}
});
这是我想封装的上面插件操作的标记示例:
<a class="myMore" href="#" title='Text here will be displayed by a jQuery plugin called qTip2'>
<img src='../images/icon/info1.png' alt='?' />
</a>
这是在使用 VB.Net 的旧版 Visual Studio 2008 网络表单环境中。 SO 上的一个线程很好地表达了我的需求 - 请参阅 MVC3 Razor views - 但我能想到的唯一封装方法是编写一个 ASP.Net Web 用户控件 (.ascx) 来转储我需要的 HTML。我设想能够在我的 .aspx 页面中添加这样的内容:
<qTipH:qTipHelper Title="Here is some content for the qTip." runat="server" />
鉴于我必须工作的“老式”环境,我是否走在正确的轨道上?
我开始编写这个控件并立即注意到这些服务器控件中的任何一个都没有标题属性 - <asp:HyperLink nor <asp:ImageButton nor <asp:LinkButton。我不认为用户控件的代码隐藏可以将标题属性文本注入标准 HTML <a> 标记。
我想我知道我需要渲染什么,但我正在寻找有关最佳方法的建议。谢谢。
编辑 - 更新:
这是我想出的 .ascx 文件:
<%@ Control Language="vb" AutoEventWireup="false"
CodeBehind="qTipHelper.ascx.vb"
Inherits="myProjectName.qTipHelper" %>
<asp:HyperLink ID="HyperLink1" runat="server" CssClass="myMore"></asp:HyperLink>
我发现像“title”这样的任何“缺失”属性都可以通过添加到控件的 Attributes 集合中的以下代码隐藏来处理:
Public Partial Class qTipHelper
Inherits System.Web.UI.UserControl
Public Title As String = Nothing
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Title Is Nothing OrElse Title = "" Then
Visible = False
Else
Dim encodedTitle As String = Server.HtmlEncode(Title)
HyperLink1.Attributes.Add("title", encodedTitle)
HyperLink1.Attributes.Add("href", "#")
HyperLink1.ImageUrl = "../images/icon/info1.png"
End If
End Sub
End Class
在我的调用页面上,我添加了这个:
<%@ Register TagPrefix="qTip" TagName="qTipHelper" Src="~/UserControls/qTipHelper.ascx" %>
然后为了吐出 HTML,我添加了这个:
<qTip:qTipHelper runat="server" title="grist for the mill courtesy of qTip" >
</qTip:qTipHelper>
是否有一种编码技术可以添加到用户控件中,该技术会在页面底部发出 一个 Javascript 脚本块(假设一个或多个标签qTipHelper 是否存在于上面的 HTML 中)?
【问题讨论】:
标签: asp.net visual-studio-2008 webforms user-controls