当捆绑路径不是相对于根文件夹时,有没有人知道为什么 Script.Render没有禁用捆绑包进行编译debug =“true”?
我正在使用与root的相对路径创建bundle(此路径类型是必需的,否则将抛出异常):
Bundle jsBundle = new ScriptBundle("~/bundles/myscripts/");
但是当我尝试渲染它时,我需要提供如下所示的完整URL:
Scripts.Render("http://myserver/bundles/myscripts/")
无论编译调试模式如何,都启用了捆绑包。
我缺少什么想法?
我的问题与this question非常相关 - 我正在以这种方式呈现我的包 - 现在:如何在编译debug =“true”时禁用它?
有什么想法吗?
谢谢! 的Ovi
答案 0 :(得分:1)
回答我自己的问题:如果捆绑网址提供为完整网址,Scripts.Render不会根据编译模式切换捆绑:
Scripts.Render("http://myserver/bundles/myscripts/")
我采用的方法是创建自己的mvc帮助器来渲染包:
public MvcHtmlString BundleScript(string bundleUrl)
{
var javascriptBuilder = new StringBuilder();
bool filesExist = false;
bool isDynamicEnabled = IsDynamicEnabled();
if (!isDynamicEnabled)
{
IEnumerable<string> fileUrls = GetBundleFilesCollection(bundleUrl);
string rootVirtualDirectory = "~/content/js/";
if (fileUrls != null)
{
foreach (string fileUrl in fileUrls)
{
javascriptBuilder.Append(new ScriptTag().WithSource(GetScriptName(fileUrl, rootVirtualDirectory)).ToHtmlString());
}
filesExist = true;
}
}
if (isDynamicEnabled || !filesExist)
{
javascriptBuilder.Append(new ScriptTag().WithSource(bundleUrl).ToHtmlString());
}
return MvcHtmlString.Create(javascriptBuilder.ToString());
}
private IEnumerable<string> GetBundleFilesCollection(string bundleVirtualPath)
{
var collection = new BundleCollection { BundleTable.Bundles.GetBundleFor(bundleVirtualPath) };
var bundleResolver = new BundleResolver(collection);
return bundleResolver.GetBundleContents(bundleVirtualPath);
}
private bool IsDynamicEnabled()
{
return BundleTable.EnableOptimizations;
}
private static string GetScriptName(string scriptUrl, string virtualDirectory)
{
return scriptUrl.Replace(virtualDirectory, string.Empty);
}