Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过请求';s应用程序路径到Requirejs config.path';当应用程序托管在IIS上的虚拟目录中时,是否为s baseUrl?_Javascript_Asp.net Mvc_Iis_Requirejs - Fatal编程技术网

Javascript 如何通过请求';s应用程序路径到Requirejs config.path';当应用程序托管在IIS上的虚拟目录中时,是否为s baseUrl?

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

我在运行asp.net mvc应用程序时遇到问题。下面,我尝试总结了我在应用程序中定义的所有配置,如文件结构、模块路径等。当应用程序作为IIS中的父网站托管时,这项功能运行良好,但在虚拟目录中托管时,无法加载模块

我的web应用程序的文件结构是:

  • 网/
    • 剧本/
      • app/(这是我的app的js文件所在)
        • common.js(所有视图的所有公共js代码都在这里)
        • navigation.js
        • 观点/
          • 帐目/
          • login.js
      • 供应商/(包含所有供应商特定的js文件)
        • jquery.js
        • domReady.js
      • main.js(requirejs配置文件)
下面是代码:

所有视图使用的主布局文件:

此脚本引用位于标题部分:

<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>