ASP.NET MVC 路由 - 动态加载 .js 脚本

ASP.NET MVC routing - loading .js scrips dynamically

尝试在 _Layout.cshtml 页面上动态加载 JavaScript 插件脚本 - 从 JavaScript 文件内部(来自 Bootstrap 模板)。我已将脚本中的 PLUGINS_PATH 更改如下:

// Declared at top of script
var PLUGINS_PATH = './Content/plugins/';

// ... for each plugin script - e.g
jQuery().themeLoadPlugin(["jPanelMenu/jquery.jpanelmenu.min.js", "jRespond/js/jRespond.js"], [], initjPMenu);

 // Load plugin
 // --------------------------------
 themeLoadPlugin: function(js, css, callback, placement) {
 jQuery.ajaxPrefilter( "script", function( s ) {
     s.crossDomain = true;
 });
 if (js) {
  var progress = 0;
  var internalCallback = function () {
    // Complete
    if (++progress === js.length) {
      $.each(css, function(index, value) {
        jQuery('head').prepend('<link href="' + PLUGINS_PATH + value + '" rel="stylesheet" type="text/css" />');
      });

      if (callback && typeof(callback) === "function") {
        callback();
      }
    }
  };

  if (placement === undefined) {
    $.each(js, function(index, value) {
      $.getScript(PLUGINS_PATH + value, internalCallback);
    });
  }
  else if (placement === 'append') {
    $.each(js, function(index, value) {
      jQuery('script[src*="bootstrap.min.js"]').after('<script src="' + PLUGINS_PATH + value + '"></script>');
      internalCallback();
    });
  }
 }
}

以上内容适用于索引页 - 例如应用程序的根 - http://localhost:1234/ - 但是如果我然后如果我浏览到另一个页面那么链接显然会因为正在寻找而中断 - 例如在联系页面上:http://localhost:1234/Home/Content/plugins/jPanelMenu/jquery.jpanelmenu.min.js

如果我将插件路径更改为:PLUGINS_PATH = '~/Content/plugins/'; 然后它们会在每个页面上出现以下中断:

 http://localhost:1234/~/Content/plugins/jPanelMenu/jquery.jpanelmenu.min.js 

希望我已经充分解释了这个问题,感谢任何帮助。

波浪号 (~) 在脚本标签的 src 属性中不起作用,你只会在你找到的路径中得到一个文字 ~。尝试:

PLUGINS_PATH = '/Content/plugins/'

像最初那样使用单个点使路径相对于当前目录,正如您所发现的那样,当您四处导航时,该路径会发生变化。设置脚本源时:

/ 相对于根

./ 相对于包含当前文件的目录

../相对于当前目录的父目录