2014-04-25 57 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