Загрузите 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
).
Как я могу достичь одного из следующих:
- Позволять
ScriptResourceDefinition
знаете, что файл существует и уже был добавлен? - сила
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>