Javascript 如何通过请求';s应用程序路径到Requirejs config.path';当应用程序托管在IIS上的虚拟目录中时,是否为s baseUrl?
我在运行asp.net mvc应用程序时遇到问题。下面,我尝试总结了我在应用程序中定义的所有配置,如文件结构、模块路径等。当应用程序作为IIS中的父网站托管时,这项功能运行良好,但在虚拟目录中托管时,无法加载模块 我的web应用程序的文件结构是:Javascript 如何通过请求';s应用程序路径到Requirejs config.path';当应用程序托管在IIS上的虚拟目录中时,是否为s baseUrl?,javascript,asp.net-mvc,iis,requirejs,Javascript,Asp.net Mvc,Iis,Requirejs,我在运行asp.net mvc应用程序时遇到问题。下面,我尝试总结了我在应用程序中定义的所有配置,如文件结构、模块路径等。当应用程序作为IIS中的父网站托管时,这项功能运行良好,但在虚拟目录中托管时,无法加载模块 我的web应用程序的文件结构是: 网/ 剧本/ app/(这是我的app的js文件所在) common.js(所有视图的所有公共js代码都在这里) navigation.js 观点/ 帐目/ login.js 供应商/(包含所有供应商特定的js文件) jquery.js
- 网/
- 剧本/
- app/(这是我的app的js文件所在)
- common.js(所有视图的所有公共js代码都在这里)
- navigation.js
- 观点/
- 帐目/
- login.js
- 供应商/(包含所有供应商特定的js文件)
- jquery.js
- domReady.js
- main.js(requirejs配置文件)
- app/(这是我的app的js文件所在)
- 剧本/
<script src="@Url.Content("~/Scripts/Vendor/require.js")"></script>
<script data src="@Url.Content("~/Scripts/main.js")"></script>
我试图在单独的文件中创建特定于视图的js代码。您可以在上面的文件结构中看到这一点,其中login.js表示login.cshtml,然后使用主布局文件。因此,要加载login.js,我在视图中使用:
<script>
require(["@Url.Content("~/Scripts/app/views/account/login.js")"], function() {});
</script>
基于上述配置,当此web应用程序作为父目录托管在本地IIS上时,一切正常
我无法理解,当同一个应用程序托管在本地IIS的虚拟目录中时,为什么会出现以下错误。我知道在呈现上述login.cshtml时会发生这种情况:
GET http://localhost: 1045/scripts/app/common.js 404 (Not Found)
Uncaught Error: Script error for: common
此应用程序的所有相同源文件都位于父应用程序下的虚拟目录中。在路由、加载应用程序中使用的其他css、js和图像方面没有问题
但是,如何确保我在main.js config文件中定义的所有路径以及加载视图特定文件都能按预期工作,即使应用程序托管在虚拟目录中?尝试将其添加到主布局页的
中:
<base href="@(Request.ApplicationPath == "/" ? "/" : Request.ApplicationPath + "/")">
这将使所有脚本相对于基本路径加载,基本路径将正确解析为您的虚拟目录(如果您不使用虚拟目录,则为网站根目录)
您可以。按照gerrod的建议,使用
base
标记效果很好。但是,它会破坏散列标记锚。相反,我建议将require配置为直接等于应用程序路径的baseUrl
<script>
var appPath = @Url.Content("~/");
require.config({
baseUrl: appPath
});
</script>
var appPath=@Url.Content(“~/”);
require.config({
baseUrl:appPath
});
这已经修复了我所有关于RequireJS的mvc路径问题。如果您喜欢clean,可以将razor简化为@Url.Content(“~/”)
<base href="@(Request.ApplicationPath == "/" ? "/" : Request.ApplicationPath + "/")">
<script>
var appPath = @Url.Content("~/");
require.config({
baseUrl: appPath
});
</script>