2015-10-15 92 views
0

我見過一些類似的問題/答案,但我似乎仍然錯過了一些東西。一切正常,直到我刷新頁面或直接轉到URL。Angularjs將html5Mode直接鏈接到.net MVC

我可以得到一個404或在mvc中創建相同的URL,但它只提供刷新時的局部,不包括佈局頁面。

有一個是建議改變MVC路由夫婦:

routes.MapRoute(
    name: "Application", 
    url: "{*url}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

當被實施,這意味着我不能訪問任何其他URL的網站上通常,除非我失去了一些東西,基本上一切都必須放入休息API或爲每個網址編寫自定義路由。這聽起來不太好。

那麼我怎麼能有一個html5 url(在有效的瀏覽器沒有哈希標籤)與angularjs和能夠瀏覽到例如。首頁/關於或首頁,然後點擊關於鏈接並讓它們在相同的基本佈局頁面中顯示相同的內容?

+0

我認爲這就是你要找的東西http://stackoverflow.com/questions/25730797/asp-net-mvc-hosting-angular-app-with-html5mode-and-routing – Teliren

+0

看起來像是在說一樣的東西。重新路由所有請求。不想使用API​​調用一切似乎比我想象的更具挑戰性。正在考慮在MVC中編寫一個過濾器來重新路由所有非Ajax請求,但也許有更好的方法。 – VirtualLife

回答

0

這可能不是最好的答案,所以如果任何人有更好的想法,請評論,否則這可能會幫助別人。

我意識到MVC Ajax指令沒有檢測到角度調用,所以我無法自動化這一方。

所以在角我不喜歡的東西

.when('/Home/Contact', { 
    templateUrl: '/Home/NgContact' 

在我的MVC控制器我有2個actionresults:

public ActionResult NgContact(){ 
    ViewBag.IsFromNg = 1; 
    return Contact(); 
} 
public ActionResult Contact() { 
    return View("Contact"); //have to type in name, may look for NgContact.cshtml 
} 

最後有什麼看法,這些可致電我把:

@if (ViewBag.IsFromNg == 1){ Layout = null; } 

因此,每個ActionResult有兩個副本,1個用於整頁加載,1個用於任何調用s的角度,但每個只有3個額外的線。