2009-07-23 71 views
4

我想有包含名稱相同的觀點多路徑文件夾結構:Asp.net MVC相同視圖名稱,不同的路徑

/profile.aspx 
/admin/profile.aspx 
/user/editpost.aspx 
/admin/editpost.aspx 

/Controllers 
    |- PostController.cs 
    |- ProfileController.cs 

我希望能夠有一個文件夾中的所有常規頁面和管理頁面在另一個文件夾。我需要整理我的視圖文件夾,如:

/Views 
    /User 
    /Story 
     |- editpost.aspx 
    /Profile 
     |- profile.aspx 
    /Admin 
    /Story 
     |_ editpost.aspx 
    /Web 
     |- profile.aspx 

或者是有辦法,我可以這樣做:

/User 
    /Views 
    /Story 
     |- editpost.aspx 
    /Profile 
     |- profile.aspx 
/Admin 
    /Views 
    /Story 
     |_ editpost.aspx 
    /Web 
     |- profile.aspx 

而且,我怎麼代碼/組織/使用單獨的控制器,用於/ User和/管理員可能具有相同的名稱?

讓我知道如果我一直不清楚。

謝謝!

+0

看起來像MVC 2是支持區域 – john 2009-08-10 21:43:24

回答

4

第一個版本(當然還有所有的RC和Beta)的一個主要問題是ASP.NET MVC不支持區域。領域是ASP.NET的替代MVC框架支持一段時間,當你的項目達到一個合理的大小,你可能會在同一個文件夾和你的代碼中可能有數百個控制器(全部使用唯一名稱)將很難整理。

您的想法非常有意義,我希望將來的ASP.NET MVC框架實例支持開箱即用(可以這麼說)。同時,在ASP.NET MVC之上創建自己的Areas框架也很容易。

這裏有一些帖子,這將幫助你:

希望他們對你有幫助。

0

更可能每個編輯視圖將需要不同的領域,所以共享editpost是不是真的可行。

但是,如果您正在編輯[確切]相同的字段,那麼可能按照您所擁有的那樣組織視圖,然後渲染可以傳遞模型的partialview。

partialView可以放在一個共同的地方,只要關注視圖以及代碼重用與partialview,就可以保持關注點的分離。

然後每個控制器都有自己的名稱,如UserController和AdminController。在其中每一個你有你的editpost行動沒有​​probs。

這是否有助於您還是需要更多?

+0

嘿,是啊我主要關心的是我可以在用於內容提交的一組常規用戶頁面/資源和用於內容管理的一組僅用於管理的頁面之間進行文件分隔cms-ish,但主要是用戶管理員)。 – john 2009-07-23 04:52:43

+0

哦,並最好在1 webapp中保存所有內容。 – john 2009-07-23 04:53:49

5

您應該閱讀this postPhil Haack

基本上,你將不得不創建自己的ViewEngine來處理文件夾設計。

0

您是否嘗試在控制器中傳遞特定視圖?我想你可以通過在任何控制器上傳遞特定視圖來繞過MVC常見視圖文件夾設計(但我不會推薦它)。

我不是100%肯定,但我認爲你可以做這樣的事情


return View("User/Story"); //or something in that matter 

但隨後你需要改變你的路線,所以控制器得到相應的路由。我想我前一段時間讀過它,但我找不到參考。讓我知道它是否有效。然而,如果你的視圖是口述你的設計,那麼也許你不應該使用MVC。

10

沒問題。您可以按照您選擇的任何方式整理文件夾。您可以按名稱,甚至通過其在操作方法路徑指定一個觀點:

return View("~/Views/Posts/Index.aspx"); 
1

還有另一種選擇太:
您可能希望創建自定義視圖引擎,並指定視圖/ partialview位置。

例如:

//Global.asax 
public class MvcApplication : HttpApplication 
    { 
     protected void Application_Start() 
     { 
      ...     
      ViewEngines.Engines.Add(new ViewEngine()); 
      ... 
     } 
    } 

public class ViewEngine : WebFormViewEngine 
    { 
     public ViewEngine() 
     { 
      PartialViewLocationFormats = PartialViewLocationFormats 
       .Union(new[] {"~/Views/{1}/Partial/{0}.ascx"}); 
     } 
    } 

允許您使用 '部分' 文件夾的局部視圖。

但我個人更喜歡區域。看來,這正是你需要的。

相關問題