首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MVC中引用JS配置文件中的相对路径

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

Stack Overflow用户
提问于 2018-10-02 15:30:45
回答 1查看 968关注 0票数 0

我正在尝试将这次扫描软件集成到应用程序中。

包含所有必需的.js.css和二进制文件的文件夹称为Resources

在我的MVC应用程序中-我把Resources文件放在我的Scripts文件夹中。

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

代码语言:javascript
复制
@section scripts {
    <script src="~/Scripts/Resources/dynamsoft.webtwain.config.js"></script>
    <script src="~/Scripts/Resources/dynamsoft.webtwain.initiate.js"></script>
}

成功加载脚本。

我面临的问题是脚本本身引用Resources文件夹中的相对路径。

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

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

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

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

代码语言:javascript
复制
Dynamsoft.WebTwainEnv.ResourcesPath = '@Url.Content("~/Scripts/Resources")';

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 01:38:17

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

代码语言:javascript
复制
<script>
    var baseUrl = '@Url.Content("~")';
</script>

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

代码语言:javascript
复制
// custom JS file
if (typeof baseUrl !== 'undefined') {
    Dynamsoft.WebTwainEnv.ResourcesPath = baseUrl + '/Scripts/Resources';
}

或者简单地提到完整路径&传递它:

代码语言:javascript
复制
@* Razor page *@
<script>
    var resourcesPath = '@Url.Content("~/Scripts/Resources")';
</script>

// custom JS file
if (typeof resourcesPath !== 'undefined') {
    Dynamsoft.WebTwainEnv.ResourcesPath = resourcesPath;
}

另一种选择是为JS脚本使用自定义JS视图引擎和文件处理程序,如下所示:

代码语言:javascript
复制
// 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");

参考文献:

使用ASPNET 3和Razor在单独的javascript文件中使用@Url.Content

将剃须刀解析的Javascript从控制器返回为ViewResult

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52611640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档