我正在使用MVC 4,尝试从.JS文件加载.csHtml文件,但我保持得到错误“找不到” 还有其他方法我可以解决吗?
这是我的Jquery代码:
$(document).ready(function () {
$('.show-sidebar').on('click', function () {
$('div#main').toggleClass('sidebar-show');
setTimeout(MessagesMenuWidth, 250);
});
var ajax_url = location.hash.replace(/^#/, '');
if (ajax_url.length < 1) {
ajax_url = 'Views/Home/index.cshtml'; //<<<< when the browser load i get the msg "not found"
}
................
................
答案 0 :(得分:0)
您需要使用MVC路由系统获取URL。使用URL帮助程序方法Url.Action
获取给定控制器/操作的URL:
if (ajax_url.length < 1) {
ajax_url = '@Url.Action("Index", "Home")';
}
修改强>
由于这段Javascript不在Razor文件中,因此您必须以另一种方式获取该URL。你可以硬编码:
if (ajax_url.length < 1) {
ajax_url = '/Home/Index';
}
这将在本地运行,但请注意,如果您的网站曾在http://www.server.com/somepath/
这样的子路径下托管,则它将不是正确的网址。我建议重新组织,以便您仍然可以使用URL帮助程序 - 将您的Javascript嵌入Razor文件中,或者将URL注入Razor的全局变量,如下所示:
(window.MyGlobalObjects || (window.MyGlobalObjects = {})).HomeUrl = '@Url.Action("Index", "Home")';
确保在加载外部JS文件之前放置上面的行。这样您就可以将URL作为变量访问:
if (ajax_url.length < 1) {
ajax_url = window.MyGlobalObjects.HomeUrl;
}
请注意,您永远不会希望您的Web服务器提供预先编译的.cshtml文件 - 这是一个在客户端无用的预编译文件(也可能包含您不会敏感的敏感信息) ;想暴露)。