【问题标题】:Getting asp.net user control to emit SCRIPT block only once if needed如果需要,让 asp.net 用户控制仅发出一次 SCRIPT 块
【发布时间】: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" />

鉴于我必须工作的“老式”环境,我是否走在正确的轨道上?

我开始编写这个控件并立即注意到这些服务器控件中的任何一个都没有标题属性 - &lt;asp:HyperLink nor &lt;asp:ImageButton nor &lt;asp:LinkButton。我不认为用户控件的代码隐藏可以将标题属性文本注入标准 HTML &lt;a&gt; 标记。

我想我知道我需要渲染什么,但我正在寻找有关最佳方法的建议。谢谢。

编辑 - 更新:

这是我想出的 .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


    【解决方案1】:

    回想起来,这是一个奇怪的问题(我想是因为我以前从来没有做过这样的事情)......

    无论如何,我只是将我当前对 qtip 的所有使用都收集在一个 Javascript 文件中,我在每个使用它的 .aspx 页面底部引用该文件,如下所示:

    <script type="text/javascript" src="<%= ResolveClientUrl("~/js/qTipCode.js") %>"></script>
    

    所以,这归结为:

    1. writing a single user control 
    2. registering the user control on .aspx content pages that will need it
    3. sprinkling the .aspx content page with the user control tag whereever it is needed
    4. adding the script tag to point to the qtip Javascript file 
    5. ensuring that the selectors in the jQuery "match up" with the HTML markup on the page 
    

    我希望这对其他人有所帮助。我学到了很多关于尝试这个的新东西。

    【讨论】:

      最近更新 更多