我有一个使用WebForms .Net 4.0的解决方案。我打算在相同的解决方案中使用MVC3。我跟着斯科特汉塞尔曼blog,事情正在上升。我不得不承认我对此很新颖。然而,似乎我错过了路径在名称空间方面真正起作用的重要部分。使用WebForms进行MVC3路由
目前,我们的解决方案有以下几种:
WebApplicatin:
Accounting
Receivables
ReceivablesGrid.aspx
ReceivableForm.aspx
Payables
PayablesGrid.aspx
PayablesForm
..etc.
所以,你可以要求使用
Domain/Accounting/Receivables/ReceivablesGrid.aspx
Domain/Accounting/Receivables/ReceivableForm.aspx?Key=1
Domain/Accounting/Payables/PayablesGrid.aspx
Domain/Accounting/Payables/PayablesForm.aspx?Key=1
页面....
我刨到另一个图层添加到类似于MVC。
WebApplicatin:
Accounting
Receivables
ReceivablesGrid.aspx
ReceivableForm.aspx
Mobile
Controllers
ReceivableConroller.cs
Models
Views
Receivables
Index
Update
Edit
Create
Payables
PayablesGrid.aspx
PayablesForm
Mobile
Controllers
PayablesConroller.cs
Models
Views
Payables
Index
Update
Edit
Create
..etc.
当然,这不是真名。但是,我试图尽可能地接近我的情况。不幸的是,如果我遵循这一点,那将是最好的,因为我可以使用可能在相同命名空间添加的一些逻辑。此外,在根目录下创建文件夹以类似于控制器,视图,模型不适用于我的解决方案。
在Global.asax中,我添加了一个路线作为这样:
routes.MapRoute(
"AccountingReceivablesMobile", // Route name
"Accounting/Receivables/Mobile/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
routes.MapRoute(
"AccountingPayablesMobile", // Route name
"Accounting/Payables/Mobile/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
另一种解决方案,我结束了试图是通过扩展RazorViewEngine。在新引擎的构造函数中,我设置了两个属性,如下所示:
base.ViewLocationFormats = new string[] { "~/Accounting/Receivables/Mobile/Views/{1}/{0}.cshtml",
"~/Accounting/Payables/Mobile/Views/{1}/{0}.cshtml"
};
base.MasterLocationFormats = new[] { "~/Views/Shared/{0}.cshtml"}.
这很奏效。不过,我只是觉得添加这些路由不像添加webForm那样可伸缩。我的问题是我真的不想为每条可能的路线添加路线。这意味着,当我添加一个新视图时,我会有另一条路由或数组入口。 那么,我怎样才能让这个更简单?我在做什么错?我看着区域,但它似乎强制创建一个地区文件夹,并把它放在里面。
感谢,
我在回复中做出了这样的假设:您在上面列出的结构是单个程序集。含义“会计”只是Web项目中的一个文件夹,“应付账款”和“应收账款”仅仅是子文件夹。那是对的吗? – adammokan 2011-05-02 19:16:19