【问题标题】:jQuery + ASP.NET WebForms + MasterPagejQuery + ASP.NET WebForms + MasterPage
【发布时间】:2025-12-22 07:10:12
【问题描述】:

早上好, 我在使用 MasterPage 和 jQuery 时遇到问题。我使用带有自定义主题的 jQuery UI,我会喜欢所有按钮的集合设计来设计 jQuery UI 按钮。 在 MasterPage 中有:

<script src="js/jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="js/jquery-ui-1.8.10.custom.min.js" type="text/javascript"></script>
<script src="js/i18n/jquery-ui-i18n.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {

        // destroy all dialogs
        $('#dialog:ui-dialog').dialog('destroy');

        // set buttons
        $('input:submit, button').button();

    });
</script>

在默认的 aspx 页面上,我有一个 asp:Button,它看起来像 jQuery UI 按钮。但是在目录中的其他 aspx 页面中,我有一些 asp:TextBox 和一个 asp:Button 并且出现错误: Microsoft JScript - 运行程序中的错误:属性 $ 具有 Null 值或未定义。属性不是函数的对象。 而且按钮不像 jQuery UI 按钮那样看。 怎么了? 谢谢你,祝你有美好的一天。

【问题讨论】:

    标签: jquery asp.net jquery-ui webforms


    【解决方案1】:

    编辑: 像这样包含您的脚本:

    <script type="text/javascript" src="<%=ResolveUrl("~/js/jquery-1.4.4.min.js")%>" > </script>
    

    或者使用绝对路径

    <script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>
    

    【讨论】:

    • 我认为问题出在 MasterPage 头部脚本标记中的 src 属性中...链接到母版页:MasterPage 和目录 /system/ 中的 aspx 页面ASPXPage...
    【解决方案2】:

    最可能的原因是 jQuery 脚本尚未下载 - 可能是由于路径错误(如 dioslaska 所述)。

    我想我会提到几个调试它的好方法,看看它是否正确。

    首先是使用Fiddler(免费)或优秀的HttpWatch(不幸的是不是免费)等工具。这两种方法都可以让您看到每个请求都传到浏览器。如果这些脚本中的任何一个无法下载,您将看到一个错误(如果由于找不到它们而无法下载,则会显示 404 错误代码)。

    或者,查看渲染网页的源代码并找到与 jquery-1.4.4.min.js 的脚本标记对应的行。将源中的 url 剪切并粘贴到新的浏览器窗口中(如果它是相对路径,不要忘记在前面加上“http://myserver/”位)。此页面是否在浏览器中正确下载?如果不是 - 它几乎肯定是罪魁祸首。

    一旦您知道什么没有下载,您就可以开始确定路径有什么问题,然后您可以修复和测试它们。

    通过这种方式,您可以在包含的文件(无论是脚本、css、图像或其他任何内容)未下载的情况下调试此类错误。

    【讨论】:

      【解决方案3】:

      我的疑问是您的 aspx 页面中的空头。

      删除这个空结构

      <asp:Content ID="cphHead" ContentPlaceHolderID="head" Runat="Server">
      </asp:Content>
      

      【讨论】:

        【解决方案4】:

        工作解决方案:

        HtmlGenericControl jQuery = new HtmlGenericControl("script");
        jQuery.Attributes.Add("type", "text/javascript");
        jQuery.Attributes.Add("src", this.ResolveClientUrl("~/js/jquery-1.5.1.min.js"));
        Page.Header.Controls.Add(jQuery);
        

        不是很干净,但它的工作原理!

        【讨论】: