假设我有一个网站的3个版本:A,B和C.我希望我的网址形式为:
{siteType}/{controller}/{action}/{id}
其中siteType
等于a
,b
或c
。
当用户在网站的A版本中时,他们应该留在那里;因此,所有生成的网址都应该具有a
的网站类型。同样适用于B和C.
我不想在生成网址时明确指定siteType
- 我希望它自动生成。此外,siteType
参数只能在一个地方使用 - 基本控制器类中的覆盖RenderView
方法 - 它将使用siteType参数为该版本选择正确的视图,css等的网站。因此,我对siteType
对我的行为的论证毫无兴趣。只有RenderView
方法才需要访问它。
实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
我们与网站语言(我们的global.asax.cs的片段)几乎相同:
routes.MapRoute(
"DefaultLanguage",
"{lang}/{controller}/{action}/{id}",
new { lang = "de-CH", controller = "Home", action = "Index", id = "" }
);
每当没有设置语言时,语言将被设置为swiss-german。
任何actionlink都会自动从当前网站获取语言代码。因此,我们不必在Actionlinks上指定任何语言。
更改siteType很简单,只需将routeValues添加到actionlink即可。 e.g。
<%= Html.ActionLink("Linktext", "Action", "Controller", new { siteType = "b" } %>
答案 1 :(得分:0)
我可能非常偏离基础,但对我来说听起来像是一个移动网站a-la
http://weblogs.asp.net/mschwarz/archive/2007/11/26/mvc-framework-and-mobile-device.aspx
公共课 MobileCapableWebFormViewEngine: WebFormViewEngine { public override ViewEngineResult FindView(ControllerContext controllerContext,string viewName, string masterName,bool useCache) { ViewEngineResult result = null; var request = controllerContext.HttpContext.Request;// Avoid unnecessary checks if this device isn't suspected to be a mobile device if (request.Browser.IsMobileDevice) { result = base.FindView(controllerContext, "A/" + viewName, masterName, useCache); } //Fall back to desktop view if no other view has been selected if (result == null || result.View == null) { result = base.FindView(controllerContext, viewName, masterName, useCache); } return result; } }
您也可以代替
Request.Browser.IsMobileDevice
有
Request.ServerVariables [“URL”]。包含(“A”)