在每个页面上加载ScriptResourceDefinition JQuery

时间:2014-09-11 15:29:35

标签: asp.net asp.net-4.5

有人问before,但没有人回复,所以我再次问我觉得这很重要。

只有在将验证控件添加到表单时,对Web表单的不显眼验证效果很好,。对于缺少验证控件的其他页面,不会呈现对JQuery文件的引用。

我目前在所有页面上都使用JQuery,因此在Master页面文件中手动引用它,

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

问题在于,当我使用自己的JQuery逻辑验证控件访问页面时,会创建两个引用(我自己的,再加上ASP.Net的ScriptResourceDefinition)。

如何实现以下目标之一:

  1. ScriptResourceDefinition知道该文件是否存在且已添加?
  2. 强制ScriptResourceDefinition每个页面上呈现JQuery,无论它是否检测到验证控件?

1 个答案:

答案 0 :(得分:2)

https://stackoverflow.com/a/12628170/792888

找到答案

答案是从ScriptManager继承并停止ASP.Net内置的创建不必要(重复)JQuery链接的行为

using System;
using System.Linq;
using System.Web.UI;

namespace WebApplication46
{
    public class CustomScriptManager : ScriptManager
    {
        protected override void OnInit(EventArgs e)
        {
            Page.PreRenderComplete += Page_PreRenderComplete;
            base.OnInit(e);
        }

        private void Page_PreRenderComplete(object sender, EventArgs e)
        {
            var jqueryReferences = Scripts.Where(s => s.Name.Equals("jquery", StringComparison.OrdinalIgnoreCase)).ToList();
            if (jqueryReferences.Count > 0)
            {
                // Remove the jquery references as we're rendering it manually in the master page <head>
                foreach (var reference in jqueryReferences)
                {
                    Scripts.Remove(reference);
                }
            }
        }
    }
}

在web.config中,这是连接以替换标准ScriptManager:

<system.web>
  <pages>
    <tagMapping>
      <add tagType="System.Web.UI.ScriptManager" mappedTagType="WebApplication46.CustomScriptManager" />
    </tagMapping>
  </pages>
</system.web>