2011-10-07 26 views
1

有沒有將多個控制器映射到單個視圖目錄的方法?在我的應用程序中,我想在控制器和視圖之間有1對1映射。原因是每個視圖都會有各種ajax動作,控制器會爲其提供方法,並且每個控制器有多個視圖會導致控制器過大。將ASP.NET MVC3控制器映射到視圖

目前我有這樣的事情:

/Controllers 
    /Dir1Controller 
    ... 

/Views 
    /Dir1 
     /FirstView.cshtml 
     /SecondView.cshtml 
     ... 

所以方向1控制器映射到目錄dir1,需要提供所有意見的firstView,SecondView等相反的動作,我寧願這樣的事情:

/Controllers 
    /FirstController 
    /SecondController 
    ... 

其中兩個控制器映射到Dir1但在執行操作時返回適當的視圖。

這似乎都不是路由映射方面的問題,但似乎沒有辦法告訴它如何找到正確的視圖。 FirstController只會查看視圖/第一個視圖。有什麼方法可以指導它查看/ Views/Dir1嗎?

我看着使用領域,但他們似乎是針對大型網站吐痰。從概念上講,所有這些頁面應該是同一區域的一部分。我只想保持我的控制器的大小有限。

+0

我會建議顛倒你的邏輯併爲每一組Ajax調用創建一個單獨的控制器。你甚至可能會發現你可以重用其中的一些。 – Druegor

回答

2

如果你的Ajax調用都涉及到一個控制器然後堅持現有的模式,並在你的控制器方法。如果可以重用它們,則將它們放在按其目的組織的部分視圖或控制器中,並在執行Ajax調用時只需請求控制器和操作。這是一個典型的理由,爲什麼走出它呢? :)

+0

這是一個好主意。我不知道爲什麼它沒有發生,我不認爲ajax調用不需要映射到一個視圖(他們只是返回json對象),所以他們可以分開處理。謝謝! – zaq

1

爲什麼不直接返回視圖?

return View("~/Controllers/FirstController/view.cshtml"); 

如果在控制器中的所有動作返回相同的觀點,用一個恆定在控制器類的頂部,是這樣的:

public class myController 
{ 
    private string ViewPath = "~/Controllers/FirstController/view.cshtml"; 
    ... 

這樣,你只需要設置路徑在每個控制器中查看一次。然後,在你的每一個動作方法:

return View(ViewPath); 
相關問題