代码之家  ›  专栏  ›  技术社区  ›  TomSelleck

MVC中JS配置文件内的引用相对路径

  •  0
  • TomSelleck  · 技术社区  · 7 年前

    我正在尝试合并 This scanning software into an application.

    包含所有必需的 和二进制文件的文件夹称为 resources。

    在我的MVC应用程序中-我已将 资源 文件放在我的 脚本 文件夹中。

    在我的 cshtml 中,我有以下内容:

    部分脚本{ <script src=“~/scripts/resources/dynamsoft.webtwain.config.js”></script> <script src=“~/scripts/resources/dynamsoft.webtwain.initiate.js”></script> } < /代码>

    这将成功加载脚本。

    我面临的问题是脚本本身引用 resources folder中的相对路径。

    dynamsoft.webtwain.config.js中,可以设置资源文件夹的路径-我将mine设置为以下内容:

    dynamsoft.webtwainev.resourcespath='~/scripts/resources';

    但是,当页面加载时,我收到一些文件的404个错误,因为它试图逐字解释路径:

    我也尝试过以下方法,但没有运气:

    dynamsoft.webtwainev.resourcespath='@url.content(“~/scripts/resources”)';
    < /代码> 
    
    

    =应用程序中的软件。

    包含所有必需的.js,.css二进制文件被调用Resources.

    在我的MVC应用程序中-我已将资源文件在我的里面Scripts文件夹。

    在我的.cshtml,我有以下内容:

    @section scripts {
        <script src="~/Scripts/Resources/dynamsoft.webtwain.config.js"></script>
        <script src="~/Scripts/Resources/dynamsoft.webtwain.initiate.js"></script>
    }
    

    成功加载脚本。

    我面临的问题是脚本本身引用了资源文件夹。

    dynamsoft.webtwain.config.js-您可以设置资源文件夹的路径-我将我的设置为:

    Dynamsoft.WebTwainEnv.ResourcesPath = '~/Scripts/Resources';

    但是,当页面加载时,我收到一些文件的404个错误,因为它试图从字面上解释路径:

    404 for resource files

    我也尝试过以下方法,但没有成功:

    Dynamsoft.WebTwainEnv.ResourcesPath = '@Url.Content("~/Scripts/Resources")';
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   Tetsuya Yamamoto    7 年前

    据我所知,你不能使用以tilde开头的相对路径( ~ )在单独的JS文件中,因为 @Url.Content() Helper和ASP.NET相对路径只能在Razor视图页内工作,但可以通过在JS中创建根路径来传递相对路径。 全球范围 (即Razor视图页面 <script> 标签):

    <script>
        var baseUrl = '@Url.Content("~")';
    </script>
    

    然后可以使用该变量将路径包含在JS文件中:

    // custom JS file
    if (typeof baseUrl !== 'undefined') {
        Dynamsoft.WebTwainEnv.ResourcesPath = baseUrl + '/Scripts/Resources';
    }
    

    或者简单地提到完整路径并通过它:

    @* Razor page *@
    <script>
        var resourcesPath = '@Url.Content("~/Scripts/Resources")';
    </script>
    
    // custom JS file
    if (typeof resourcesPath !== 'undefined') {
        Dynamsoft.WebTwainEnv.ResourcesPath = resourcesPath;
    }
    

    另一种选择是将自定义JS视图引擎与用于JS脚本的文件处理程序一起使用,如下面的示例:

    // custom JS engine
    public class CustomJSEngine : BuildManagerViewEngine
    {
        public CustomJSEngine()
        {
            ViewLocationFormats = new[]
            {
                "~/Scripts/{0}.js",
                "~/Scripts/Resources/{0}.js"
            };
    
            FileExtensions = new[]
            {
                "js"
            };
        }
    
        protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
        {
            var view = new RazorView(controllerContext, viewPath,
                                     layoutPath: masterPath, runViewStartPages: true, viewStartFileExtensions: FileExtensions,
                                     viewPageActivator: ViewPageActivator);
            return view;
        }
    }
    
    // put these lines below inside Application_Start()
    RazorCodeLanguage.Languages.Add("js", new CSharpRazorCodeLanguage());
    ViewEngines.Engines.Add(new CustomJSEngine());
    
    // add this line if necessary
    WebPageHttpHandler.RegisterExtension(".js");
    

    参考文献:

    @Url.Content in separate javascript file using ASPNET MVC 3 and Razor

    Returning razor-parsed Javascript as a ViewResult from a controller