【发布时间】:2017-01-26 14:48:41
【问题描述】:
我有一个 ASP.Net MVC 网站,“在线学习普通话”。它是可操作的,对我来说工作正常。现在,我想重新使用这个网站作为新网站的模板,“在线学习西班牙语”。这两个网站将位于完全不同的域和完全不同的服务器上。
对于我的“在线学习普通话”网站,1/3 的网页是外部页面,用户无需登录网站即可浏览。 另外 2/3 的网页是内部页面,用户只有登录网站才能看到这些页面。我希望两个网站使用不同的外部页面(两个网站的外部 .aspx 页面会有所不同)但两个网站共享同一组内部页面(内部.aspx 页面对于两个网站都是相同的)。
我的问题是,在 ASP.Net MVC 中,我如何为这两个网站构建我的项目/解决方案?由于两个网站的唯一区别是外部页面,我能想到的处理外部页面的最简单解决方案是将每个视图的映射存储在数据库中,根据某个常量(即 WebsiteType)从数据库中获取此映射在 web.config 中设置,然后根据映射返回视图。例如,在我的控制器中:
// WebsiteType is stored in web.config. It is set to LearnMandarin for the learn Manadarin
// online website and it is set to LearnSpanish for the learn Spanish online website
string websiteType = WebConfigurationManager.AppSettings["WebsiteType"];
// figure out which Homepage .aspx view to return, based on the websiteType
// GetView(...) will get the mapping from the database
string viewToReturn = GetView(websiteType, "HomepageView");
return View(viewToReturn);
这是迄今为止我能想到的最干净的解决方案,也是我能想到的最好的结构。我最终会在同一目录中有两个不同的 .aspx 文件 - 一个 .aspx 页面用于学习普通话在线网站,另一个 .aspx 文件用于学习西班牙语在线网站。这是构建我的项目的最佳方式还是有更简洁的方式?
(我使用的是 Visual Studio 2010 和 ASP.Net MVC 版本 3.0.0.0)
【问题讨论】:
-
这就是MVC的Area特性的真正目的!
-
那么,您是说我的外部页面应该在区域下,而我共享的内部页面不应该在区域下吗?我是使用区域的新手,所以如果我没有跟上速度,我深表歉意(我现在正在阅读它的教程)。
-
您可以创建一个属性来根据网站域或其他因素设置 Area RequestContext 数据,然后将页面放置在您认为合适的位置。
-
好的,很酷 让我研究一下 RequestContext 以及如何将它应用到区域。此外,如果有人可以提供 Haney 建议的更详细的答案,那将不胜感激,因为我试图弄清楚 Areas 和 RequestContext 如何都可以用来解决我的问题,而且我是使用 Areas 和 RequestContext 的新手。
标签: c# asp.net-mvc visual-studio-2010 asp.net-mvc-3