残念ながら、ScriptResourceMapping が必要です。ただし、少し作業すれば、ScriptManager から参照を削除して、jQuery を再度レンダリングしないようにすることができます。
Web プロジェクトで ScriptManager から派生する独自のクラスを作成します。
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 で tagMapping エントリを構成して、ASP.NET がボックス内のものではなくカスタム ScriptManager を使用するようにします。
<system.web>
<pages>
<tagMapping>
<add tagType="System.Web.UI.ScriptManager" mappedTagType="WebApplication46.CustomScriptManager" />
</tagMapping>
</pages>
</system.web>
それでおしまい。これで、CustomScriptManager は、ScriptManager がレンダリング ロジックを開始する機会を得る前に、すべての jQuery 参照がそれ自体から削除されていることを確認し、UnobtrusiveValidation が機能するためのすべての要件を引き続き満たします (ページのタグに jQuery への参照があると仮定します)。