2014-04-25 58 views
1

我正在使用MVC 4,试图从.JS文件加载.csHtml文件,但我保持得到错误“未找到” 有没有其他办法可以解决?从.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

您不希望网络服务器提供.cshtml文件 - 您是否试图在'/ Home/Index'加载视图? – McGarnagle

+0

多数民众赞成在正确的我想加载在/ home /索引 –

回答

0

你会想使用MVC路由系统的URL。使用URL helper方法Url.Action获取URL对于给定的控制器/动作:

if (ajax_url.length < 1) { 
    ajax_url = '@Url.Action("Index", "Home")'; 
} 

编辑

因为这个片段的Javascript是不是在剃刀文件,你就必须获得另一种方式的URL。你可以只硬编码:

if (ajax_url.length < 1) { 
    ajax_url = '/Home/Index'; 
} 

这将在本地工作,但要注意,它不会是正确的网址,如果你的网站正在像http://www.server.com/somepath/子路径驻留过。我会建议重新组织,这样你仍然可以使用URL帮手 - 无论是嵌入你的Javascript在剃刀文件,或注入到URL从剃刀这样的全局变量:

(window.MyGlobalObjects || (window.MyGlobalObjects = {})).HomeUrl = '@Url.Action("Index", "Home")'; 

确保放置在加载外部JS文件之前的上面一行。这样,你应该能够访问URL作为变量:

if (ajax_url.length < 1) { 
    ajax_url = window.MyGlobalObjects.HomeUrl; 
} 

注意,你绝不会想服预编译.cshtml文件Web服务器 - 这是一个预编译的文件,在客户端无用(也可能包含您不想公开的敏感信息)。

+0

视图仍然得到这个相同的错误,并在运行时,此网址生成http:// localhost:63049/Home/@Url.Action(%22Index%22, %20%22Home%22) –

+0

@AbuHamzah查看我的更新回答。我假设你的JS代码被嵌入到Razor文件中,但显然它是一个独立的.js。 – McGarnagle