Sid*_*dey 3 javascript iis asp.net-mvc requirejs
我有问题用requirejs运行我的asp.net mvc应用程序.下面我试着总结一下我在我的应用程序中定义的所有配置,比如文件结构,模块路径等.当app作为IIS中的父网站托管但在虚拟机托管时无法加载模块时,这种方法很有效.目录.
我的Web应用程序的文件结构是:
以下是代码:
所有视图使用的主布局文件:
此脚本引用位于标题部分:
<script src="@Url.Content("~/Scripts/Vendor/require.js")"></script>
<script data src="@Url.Content("~/Scripts/main.js")"></script>
Run Code Online (Sandbox Code Playgroud)
main.js - 配置文件: 如下所示,baseurl是针对main.js配置文件设置的.
require.config({
baseUrl: "../scripts",
paths: {
"common": "app/common",
"jquery": "vendor/jquery-1.11.0",
"domReady": "vendor/domReady-2.0.1",
"sammy": "vendor/sammy-0.7.4",
"jqueryui": "vendor/jquery-ui-1.10.4.min",
"jquery.validate": "vendor/jquery.validate",
"jquery.validate.unobtrusive": "vendor/jquery.validate.unobtrusive",
"jquery.cookie": "vendor/jquery.cookie",
"bootstrap": "vendor/bootstrap.min"
},
shim: {
'sammy': ['jquery'],
"jqueryui": {
exports: "$",
deps: ['jquery']
},
"jquery.validate": {
deps: ['jquery']
},
"jquery.validate.unobtrusive": {
deps: ['jquery', 'jquery.validate']
},
"jquery.cookie": {
deps: ['jquery']
},
"bootstrap": {
deps: ['jquery']
}
}
});
Run Code Online (Sandbox Code Playgroud)
我正在尝试在其自己的单独文件中创建特定于视图的js代码.您可以在上面的文件结构中看到这一点,其中login.js用于login.cshtml,然后使用主布局文件.所以,要加载login.js,我在视图中使用它:
<script>
require(["@Url.Content("~/Scripts/app/views/account/login.js")"], function() {});
</script>
Run Code Online (Sandbox Code Playgroud)
login.js中的代码如下:这有其登录视图特定代码,它还加载用common.js文件编写的代码.
define(["common"],function ($) {
// use [data-shell-spinner="generic"] on element to use it as a spinner.
console.log("login view");
});
Run Code Online (Sandbox Code Playgroud)
基于以上配置,当此Web应用程序作为父目录托管在本地IIS上时,一切正常.
当同一个应用程序托管在本地IIS上的虚拟目录中时,我无法理解为什么会出现以下错误.我知道当渲染上面的login.cshtml时会发生这种情况:
GET http://localhost: 1045/scripts/app/common.js 404 (Not Found)
Uncaught Error: Script error for: common
Run Code Online (Sandbox Code Playgroud)
此应用程序的所有相同源文件都驻留在父应用程序下的vd虚拟目录中.路由,加载其他css,js,应用程序中使用的图像没有问题.
但是,即使应用程序托管在虚拟目录中,如何确保在main.js配置文件和加载视图特定文件中定义的所有路径都按预期工作?
尝试将其添加到" <head>主布局"页面中:
<base href="@(Request.ApplicationPath == "/" ? "/" : Request.ApplicationPath + "/")">
Run Code Online (Sandbox Code Playgroud)
这应该使所有脚本相对于基本路径加载,这应该正确解析到您的虚拟目录(或者如果您没有使用虚拟目录,则为网站根目录).