Как включить ScriptBundle в пользовательский элемент управления?

У меня есть какой-то устаревший код ASP.NET WebForms, который использует RegisterClientScriptInclude в классе, который наследуется от UserControl. Я хочу заменить несколько вызовов RegisterClientScriptInclude одним новомодным Bundle. Как мне разрешить URL комплекта из моего маршрута комплекта, глубоко внутри скомпилированной сборки?

2 ответа

Решение

Предполагая, что вы уже зарегистрировали пакет и просто хотите создать ссылку на пакет.

Самый простой способ - просто позвонить

BundleCollection.ResolveBundleUrl(<path to bundle, i.e. "~/bundles/mybundle">).  

Обратите внимание, что если вы не используете помощник Scripts для рендеринга тегов, вы всегда будете получать ссылку на пакет, при вызове ResolveBundleUrl функция автоматического отсутствия пакета не будет действовать.

Попробуйте этот метод:

private void RegisterJavaScriptBundle(string bundleIdent)
    {
        var bundleUrl = String.Format("~/bundles/{0}", bundleIdent);

        var name = String.Format("Bundle{0}", bundleIdent);

        if (ScriptManager.ScriptResourceMapping.GetDefinition(name) == null)
            ScriptManager.ScriptResourceMapping.AddDefinition(name, new ScriptResourceDefinition { Path = bundleUrl });

        ScriptManager.RegisterNamedClientScriptResource(this.Page, name);
    }

Затем вызовите его в событии загрузки usercontrol:

this.RegisterJavaScriptBundle("MyBundle");

Будет сгенерирована ссылка на скрипт с хэшем содержимого:

<script src="/bundles/MyBundle?v=B6mdgLTYJ2gPQv_XxE07ACAAaNA6Lo4L_KxViWZE-CY1" type="text/javascript"></script>
Другие вопросы по тегам