我正在尝试将this scanning软件整合到应用程序中。
包含所有必要的.js
,.css
和二进制文件的文件夹称为Resources
。
在我的MVC应用程序中-我已将Resources
文件放在我的Scripts
文件夹中。
在我的.cshtml
中,我有以下内容:
@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错误,因为它试图从字面上解释路径:
我也尝试了以下方法,但是没有运气:
Dynamsoft.WebTwainEnv.ResourcesPath = '@Url.Content("~/Scripts/Resources")';
答案 0 :(得分:1)
据我所知,您无法在单独的JS文件中使用以代字号(~
)开头的相对路径,因为@Url.Content()
助手和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