如何摆脱强制添加下划线与时间戳

问题描述:

我正在与MVC5的项目工作,并遇到了一个MVC的问题,试图“帮助”我,我想。我正在做的是试图通过提取他们的javascript来清理视图,而无需摆弄bundle配置。如何摆脱强制添加下划线与时间戳

乱包式文件夹中的通用加载将是一个选项,但我宁愿避免这种情况。

因此,这里是我的代码,这是工作:

public static string GetControllerName(this ControllerBase controller) 
    { 
     var name = controller.GetType().Name; 
     if (name.ToLower().EndsWith("controller")) 
      return name.Substring(0, name.Length - 10); 
     return name; 
    } 

    public static IHtmlString LoadViewScripts(this HtmlHelper helper) 
    { 
     var view = helper.ViewContext.View as RazorView; 
     if (view != null && !string.IsNullOrEmpty(view.ViewPath)) 
     { 
      var controllerName = helper.ViewContext.Controller.GetControllerName(); 
      var vPath = string.Format("~/Scripts/View/{0}/{1}.js", controllerName, Path.GetFileName(view.ViewPath)); 

      var realPath = helper.ViewContext.HttpContext.Server.MapPath(vPath); 
      if (File.Exists(realPath)) 
      { 
       var urlPath = UrlHelper.GenerateContentUrl(vPath, helper.ViewContext.HttpContext); 
       var lwrite = File.GetLastWriteTime(realPath); 

       return new HtmlString(string.Format("<script type='text/javascript' language='javascript' src='{0}?v={1}'></script>", urlPath, lwrite.Ticks)); 
      } 
     } 

     return new HtmlString(string.Empty); 
    } 

结果我传递到src属性:

http://localhost/AppName/Scripts/View/Map/SelectSite.cshtml.js?v=635569414679160391 

什么我得到(火狐的网络视图):

http://localhost/AppName/Scripts/View/Map/SelectSite.cshtml.js?v=635569414679160391&_=1421342715176 

我期待什么(网络视图的Firefox):

http://localhost/AppName/Scripts/View/Map/SelectSite.cshtml.js?v=635569414679160391 

有没有人知道如何停止MVC从“帮助”缓存/刷新在这种特殊情况下的东西?

+1

你也许经过HTML到jQuery的通过AJAX?我知道jQuery补充说,以防止缓存。 – 2015-01-15 17:47:34

+0

将lwrite.Ticks.ToString()。SubString(0,18)的工作来切断下划线和后面的任何东西? – dkiefer 2015-01-15 19:09:51

+0

@MikeMcCaughan不直接。这个方法在@ Html.LoadViewScripts()的相应视图中被调用。视图本身是通过ajax加载的(在这里使用kendoUI窗口,没有关于缓存的属性),并且也包含一个下划线,这也不是我的意图。 – Dbl 2015-01-16 09:59:12

好的。所以原来有两个原因为什么它不为我工作。

  1. 禁用默认启用的缓存的kendo属性不在api中。像这样调用它解决了我的窗口问题。

    content: { 
    url: targetUrlSiteSelect, 
    cache : true 
    } 
    
  2. 我的附加脚本标记仍包含下划线元素。后来我发现在这里包含注释中该解决方案: jQuery version 1.5 - ajax - <script> tag timestamp problem

评论布莱斯:

$.ajaxPrefilter('script', function(options) { options.cache = true; });