2009-07-23 57 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"}); 
     } 
    } 

允许您使用 '部分' 文件夹的局部视图。

但我个人更喜欢区域。看来,这正是你需要的。

相关问题