Jquery 不能在使用 ASP.NET C# 的母版页中工作,并且在不使用母版页的情况下工作正常

Posted

技术标签:

【中文标题】Jquery 不能在使用 ASP.NET C# 的母版页中工作,并且在不使用母版页的情况下工作正常【英文标题】:Jquery is not working in Master Page using ASP.NET C# and working fine with without using master page 【发布时间】:2015-07-29 02:28:15 【问题描述】:

此代码在 .aspx 页面中运行良好,没有问题。但如果我使用母版页,那么这里没有任何效果,我尝试将 JQuery 脚本放在母版页中,即使这样也没有任何效果。这里有什么需要设置的吗?仍然不明白为什么 info div 没有加载计数。下面是链接

<script type="text/javascript" src="scripts/jquery-1.3.2-vsdoc2.js"></script>

我也参考以下博客:

http://mwtech.blogspot.co.il/2009/04/2-ways-to-load-jquery-from-aspnet.html

MasterPage.master 代码:

 <head runat="server">
<title></title>

   <script type="text/javascript" src="scripts/jquery-1.3.2-vsdoc2.js">          </script>



<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>

<form id="form1" runat="server">

 <div>
    <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

    </asp:ContentPlaceHolder>
</div>

</form>

</body>

</html>

Default2.aspx 代码

 <script type="text/javascript">

     var Editor1 = '#Editor1';
     var Editor1CountLimit = 50
     var Editor1InfoArea = '#Info';

     var Editor2 = '#Editor2';
     var Editor1InfoArea1 = '#Info1';

     $(document).ready(function () 
         TrackCharacterCount(Editor1, Editor1CountLimit, Editor1InfoArea);
         TrackCharacterCount(Editor2, Editor1CountLimit, Editor1InfoArea1);
     );

     function TrackCharacterCount(ctl, limit, info) 
         var editor = $(ctl).contents().find('iframe').eq(2);
         $(editor).load(function () 
             var txt = $(this).contents().find('body').text();
             $(info).html(txt.length); //set initial value 
             $(this).contents().keyup(function () 
                 var txt = $(this).contents().find('body').text();

                 if (txt.length > limit)
                     $(info).html(txt.length).css("color", "red");
                 else
                     $(info).html(txt.length).css("color", "");
             );
         );
     

     function ValidateEditor1Length(source, args) 
         var editor = $(Editor1).contents().find('iframe').eq(2);
         var txt = editor.contents().find('body').text();
         var isValid = txt.length > 0 && txt.length <= Editor1CountLimit;
         args.IsValid = isValid;
     


     function ValidateEditor1Length1(source, args) 
         var editor = $(Editor2).contents().find('iframe').eq(2);
         var txt = editor.contents().find('body').text();
         var isValid = txt.length > 0 && txt.length <= Editor1CountLimit;
         args.IsValid = isValid;
     

</script> 


      <asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>

            <div id="Info">Info</div>

  <%--  <cc1:Editor ID="Editor1" runat="server" />--%>
    <cc1:Editor ID="Editor1" runat="server" />
    <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="Editor1" ClientValidationFunction="ValidateEditor1Length" ErrorMessage="Exceeded Character Limit"></asp:CustomValidator>


   <div id="Info1">Info</div>
   <%-- <cc1:Editor ID="Editor2" runat="server" />--%>
    <cc1:Editor ID="Editor2" runat="server" />
    <asp:CustomValidator ID="CustomValidator2" runat="server" ControlToValidate="Editor2" ClientValidationFunction="ValidateEditor1Length1" ErrorMessage="Exceeded Character Limit"></asp:CustomValidator>

</div>
<asp:Button ID="Button1" runat="server" Text="Button" />

谢谢。

【问题讨论】:

【参考方案1】:

尝试将您的 Jquery 引用更改为:

<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/scripts/jquery-1.3.2-vsdoc2.js") %>"></script>

【讨论】:

是的。也试过这个,但没有加载 jquery info div,请更喜欢上面的链接。 @马丁 你有没有看一下 Chrome 开发者工具控制台,有没有 Javascript 错误或缺少资源? 使用单页工作完美,使用母版页时出现问题,请参考上面的链接。【参考方案2】:

js文件正在下载吗?在开发人员工具(F12)下使用网络也检查。还要检查最终页面的 HTML,确认控件的 ID 确实是您在脚本中使用的 ID。

【讨论】:

请在我的问题中选择上面的链接,你会得到我的答案。 @Rui lima 文件是否被下载? 在不使用母版页的情况下,此代码运行良好。但是当我使用上面的代码处理母版页时,jquery 没有加载。请检查上面的链接,你会得到我的问题。 @Rui lima 伙计,我们看不到代码。这个问题肯定与 asp.net webforms 生成控件 ID 的方式有关。如果您想解决您的问题,我们需要确保两件事:1. 确保正在下载 js 文件,以及 2. 确保 ID 确实是正确的。使用母版页时,有时您会得到 id="ctl00_MainContent_Age" 的 ID,而不仅仅是 id="Age"。 asp.net/web-forms/overview/older-versions-getting-started/…,顺便说一句,您提供的链接不是一个很好的例子。 仍然很困惑,上面的代码是可用的,你能找到出错的地方吗? @瑞丽玛【参考方案3】:

我有同样的问题。在浏览器客户端中查看输出源代码时,我注意到所有“id”都在 id 本身之前使用 ContentPlaceHolderID 作为前缀进行了修改,因此 jQuery 正在寻找的 Id 不再存在。

解决方案是在子页面的“内容部分”中包含参数 ClientIDMode="Static",这样 id 对象在内容页面上保持不变,jQuery 可以通过原始 id 找到它。

希望对你有帮助。

【讨论】:

以上是关于Jquery 不能在使用 ASP.NET C# 的母版页中工作,并且在不使用母版页的情况下工作正常的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C#、ASP.NET、SQL Server 端处理实现 jQuery DataTables 插件?

使用 asp.net C# 和 jquery 过滤数据集合

jquery datepicker和asp.net c#空值

将数据传递到处理程序的 Jquery ajax 不起作用(Asp.net、C#、Jquery)

asp.net中radiobutton 的问题 C#

在 ASP.NET C# 中使用 jQuery 将多个参数传递给 Web 方法