从.JS加载/调用csHtml

时间:2014-04-25 15:16:36

标签: asp.net-mvc-4 razor

我正在使用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" 
    }
     ................
     ................

1 个答案:

答案 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文件 - 这是一个在客户端无用的预编译文件(也可能包含您不会敏感的敏感信息) ;想暴露)。