Загрузите ScriptResourceDefinition JQuery на каждую страницу

Об этом уже спрашивали, но никто не ответил, поэтому я спрашиваю еще раз, так как считаю это важным.

Ненавязчивая проверка для веб-форм прекрасно работает, но только тогда, когда в форму добавлены элементы управления проверкой. Для других страниц, на которых отсутствуют элементы управления проверкой, нет ссылки на файл JQuery.

В настоящее время я использую JQuery на всех страницах, поэтому я обращаюсь к нему вручную в файле главной страницы,

<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 ответ

Решение

Нашел ответ тут /questions/34339092/aspnet-45-nenavyazchivaya-proverka-veb-form-vopros-jquery/34339103#34339103

Ответ заключается в наследовании от 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>
Другие вопросы по тегам