Почему это происходит
сверток ASP.NET поставляется с механизмом кэширования. Когда вы добавляете пакет на страницу с помощью Scripts.Render
, механизм автоматически помещает строку запроса v
в URL-адрес пакета.
@Scripts.Render("~/bundles/commands")
производит что-то вроде:
<script src="/bundles/commands?v=eiR2xO-xX5H5Jbn3dKjSxW7hNCH9DfgZHqGApCP3ARM1"></script>
Если этот параметр не указан, кэшировать результат будет возвращен. Если вы добавите тег сценария вручную, без него, вы можете столкнуться с тем же вопросом кэширования.
Информация о струне v
запроса предоставляется here ("Bundle Caching"), но это не очень полезно.
Что я могу сделать
Вы все еще можете загрузить скрипты динамически в комплекте, но вам придется добавить параметр v
. Обратите внимание, что это не сработает, если вы попробуете случайно сгенерированный хеш (я попробовал). Благодаря Frison B Alexander, это возможно, используя этот подход:
private static string GetHashByBundlePath(string bundlePath)
{
BundleContext bundleContext = new BundleContext(new HttpContextWrapper(System.Web.HttpContext.Current), BundleTable.Bundles, bundlePath);
Bundle bundle = BundleTable.Bundles.GetBundleFor(bundlePath);
BundleResponse bundleResponse = bundle.GenerateBundleResponse(bundleContext);
Type bundleReflection = bundleResponse.GetType();
MethodInfo method = bundleReflection.GetMethod("GetContentHashCode", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
object contentHash = method.Invoke(bundleResponse, null);
return contentHash.ToString();
}
Так что вы можете сделать, это: Вернуть расслоение хэш с точки зрения ASP.NET и получить его, когда вам нужно загрузить скрипт.
я мое заявление, я создал объект JS, специфичный для него:
var appBundles = {
commands: "/bundles/commands?v=eiR2xO-xX5H5Jbn3dKjSxW7hNCH9DfgZHqGApCP3ARM1"
};
Надеется, что это помогает!