我想拥有多个包含相同名称视图的路径文件夹结构:
/profile.aspx
/admin/profile.aspx
/user/editpost.aspx
/admin/editpost.aspx
/Controllers
|- PostController.cs
|- ProfileController.cs
我希望能够将所有常规页面放在文件夹中,将管理页面放在另一个文件夹中。我是否需要组织我的Views文件夹,如:
/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和/ Admin编写/组织/使用可能具有相同名称的单独控制器?
如果我不清楚,请告诉我。
谢谢!
答案 0 :(得分:10)
没问题。您可以以您选择的任何方式组织文件夹。您可以按名称或甚至在Action方法中的路径指定视图:
return View("~/Views/Posts/Index.aspx");
答案 1 :(得分:5)
您应该按this post阅读Phil Haack。
基本上,您必须创建自己的ViewEngine才能使用文件夹设计。
答案 2 :(得分:4)
第一个版本的主要问题之一(当然还有所有RC和Beta)是ASP.NET MVC不支持的区域。区域是ASP.NET的替代MVC框架已经支持了一段时间,当您的项目达到合理的大小时,您最终可能会在同一文件夹和代码中使用数百个控制器(所有控制器都具有唯一名称)很难排序。
您的想法非常有意义,我希望ASP.NET MVC框架的未来实例支持开箱即用的区域(可以这么说)。与此同时,很容易在ASP.NET MVC之上创建自己的区域框架。
以下是一些可以帮助您的帖子:
希望他们对你有所帮助。
答案 3 :(得分:1)
还有另一种选择:
您可能想要创建自定义ViewEngine并指定视图/部分视图位置。
例如:
//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"});
}
}
允许您将“Partial”文件夹用于部分视图。
但我个人更喜欢区域。似乎这正是你所需要的。
答案 4 :(得分:0)
每个编辑视图很可能需要不同的字段,因此共享editpost并不可行。
如果您正在编辑[完全]相同的字段,那么可能会按照您的方式组织视图,然后渲染可以将模型传递给的部分视图。
partialView可以在一个共同的位置,在视图方面保持关注点的分离以及部分视图的代码重用。
每个控制器都有自己的名称,如UserController和AdminController。在其中的每一个中你都有你的editpost动作没有probs。
这有帮助还是需要更多?
答案 5 :(得分:0)
您是否尝试在控制器中传递特定视图?我认为您可以通过在任何控制器上传递特定视图来绕过MVC公共视图文件夹设计(但我不会推荐它)。
我不是100%肯定,但我认为你可以做像
这样的事情
return View("User/Story"); //or something in that matter
但是,您需要更改路线,以便控制器相应地进行路由。我想我前一段时间读过它,但我找不到参考文献。如果有效,请告诉我。
但是,如果您的视图正在指示您的设计,那么也许您不应该使用MVC。