2017-10-15 271 views
-1

我是新來的MVC,我試圖通過創建一個練習網站,這將是一個圖庫網站,查看和上傳圖像。我遇到的問題是我無法使路由正常工作。MVC 4路由到控制器

以下是我的路由代碼和解決方案樹的鏈接: https://imgur.com/a/Oc1Tt

我是否錯誤地設置了視圖和控制器?

我得到的錯誤是:未找到'索引'或其主人的視圖或沒有視圖引擎支持搜索的位置。以下位置進行檢索:

感謝任何輸入

+0

將HomeView.cshtml重命名爲Index.cshtml – Jaybird

+0

代碼必須在問題中 - 而不是鏈接到它的圖像。 –

+0

1)最好給動作方法和相應的視圖命名。所以你只需要'返回View()'。 2)在每個控制器和視圖中都有一個默認的'Index'操作也很有用。 3)不需要將'View'附加到'cshtml'文件。 4)閱讀更多關於MVC約定。 – adiga

回答

0

路由功能可將傳入請求轉換爲路由值或通過使用路線值以產生一個URL。路由值可以作爲URL本身中的參數設置爲默認值,或者兩者都設置(默認值使URL參數可選)。

您尚未在路線中設置任何路線值。由於您在URL中沒有路由參數,因此您需要設置默認值(MVC需要控制器和操作)。

routes.MapRoute(
    name: "Gallery", 
    url: "Gallery/Index", 
    defaults: new { controller = "Gallery", action = "Index" } 
); 

也就是說,您的Default路由已經覆蓋此URL。如果您希望Default路線未涵蓋的行爲,則只需添加自定義路線。另外,如果您更改視圖名稱以使其與操作方法的名稱不匹配,則必須從操作方法明確指定名稱。

public ActionResult Index() 
{ 
    return View("~/Views/Gallery/GalleryView.cshtml"); 
} 

默認情況下,MVC使用約定。只需將視圖Index.cshtml而不是GalleryView.cshtml命名爲視圖就簡單多了,因此您可以僅從操作方法返回View

public ActionResult Index() 
{ 
    return View(); 
}