2012-10-02 166 views
2

我有一個ASP.NET MVC 3應用程序。我有點理解路線,但有時候我會陷入困境。目前,我有如下文件結構:在ASP.NET MVC中查看根路徑的路徑

/Controllers 
    Child1Controller.cs 
    Child2Controller.cs 
    RootController.cs 
/Views 
    Index.cshtml 
    Test.cshtml 
    Child1 
    Index.cshtml 
    Item.cshtml 
    Child2 
    Index.cshtml 
    Item.cshtml 

我可以成功地從我的意見在Child1和Child2中獲取HTML。在瀏覽器中訪問/ Child1/Index或/ Child2/Index。但是,我不知道如何使用/ Index來查看/ Views目錄中的Index.cshtml的內容。我該如何連線?

謝謝!

+0

試過在RootController.cs中創建Index方法(使用HttpGet)嗎? – trenpixster

回答

3

爲了訪問的觀點,他們需要在MVC控制器/動作相關。爲了您的Child1 /索引和CHILD2 /索引,你有你的Child1和CHILD2控制器代碼類似於以下:

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

對於你問的意見,你可以做兩件事情之一。

1:您可以創建根文件夾,然後將這些意見納入該文件夾。從ActionMethod返回視圖時,MVC將首先在Views文件夾中查找與控制器名稱相同的文件夾(「Root」),然後在該文件夾中查找與ActionName對應的View。如果在那裏找不到,那麼MVC會查看Views/Shared文件夾。如果它在那裏找不到,則會拋出錯誤。所以,在你rootcontroller.cs文件,創建以下操作方法:

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

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

2:如果你真的想保持你的文件夾結構的方式,這是,你可以準確地指定的觀點是,你希望操作返回(可用於返回與操作方法名稱不同的視圖)。改變你rootcontroller.cs文件的操作方法,以指定的觀點是,要返回該動作:

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

public ActionResult Test(){ 
     return View("~/Views/Test.cshtml); 
    } 

注意,這兩種方法假定您已經修改爲使用默認路由「根「作爲開箱即用的默認控制器,它是」Home「控制器。現在,使用以下兩種方法之一,您可以使用以下方法:

www.yoursite.com -> Returns Root/Index 
www.yoursite.com/Root/Test -> Returns Root/Test 
www.yoursite.com/Root/Index -> Returns Root/Index 
1

只是/Index將路由到默認的控制器和它在路線配置指定索引動作(通常是在Global.asax.cs中)。但是,此默認控制器的適當操作將返回ViewResult,它將嘗試將視圖查找到「控制器」文件夾中。因此,如果您的默認控制器是RootController,則該視圖必須位於Root/Index。 也在共享文件夾中搜索視圖,但無論如何都不是根目錄。如果你想改變這個順序嘗試this link