mic*_*cet 21 asp.net-mvc asp.net-mvc-routing
我已经开始将我的简单网站转换为ASP.NET MVC,只是为了搞乱它.我有一个切换语言功能,基本上将Session ["language"]设置为另一种语言并刷新页面.如果可以做得更好,请纠正我,但我为此制作了两个控制器并在那里设置会话.问题是最后的路由.我可以用一些简洁的方式刷新页面,还是可以获取当前的Action并将其重新路由到该页面?或者这更像是Ajax的场景?
感谢您的建议!
rus*_*sau 19
你有没有理由使用会话变量?更常见的解决方案是在路线中包含语言代码,即blah.com/en/info或blah.com/jp/info(英语和日语)
如果您这样做,网站上的每个页面都可以包含指向每种语言的链接.如果您正在撰写可公开访问的网站,这也可以让Google更轻松地为您的所有内容编制索引.
本文解释了如何在域中包含该语言,即.en.blah.com或jp.blah.com:http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx
更新:这是一个在URL路由中包含语言代码的简单示例.
更改默认路由以包含语言参数:
routes.MapRoute(
"Default",
"{language}/{controller}/{action}/{id}",
new { language = "en", controller = "Home", action = "Index", id = "" }
);
Run Code Online (Sandbox Code Playgroud)
将每种语言的链接添加到您的母版页:
<li><%= Html.ActionLink(
"Spanish",
ViewContext.RouteData.Values["action"].ToString(),
new { language = "es" })%></li>
<li><%= Html.ActionLink(
"French",
ViewContext.RouteData.Values["action"].ToString(),
new { language = "fr" })%></li>
<li><%= Html.ActionLink(
"English",
ViewContext.RouteData.Values["action"].ToString(),
new { language = "en" })%></li>
Run Code Online (Sandbox Code Playgroud)
这些将呈现为返回您所在页面的链接 - 仅在语言已更改的情况下.
以下方法对我有用:
我正在使用cookie和我自己的引擎进行本地化所有你需要在页面上放置一些链接,重定向到这样的东西:
public class LanguageController : Controller
{
//
// GET: /Language/
public void Change(string id)
{
var cuka = new HttpCookie("lang", id + "");
cuka.Expires = DateTime.Now.AddYears(10);
System.Web.HttpContext.Current.Response.Cookies.Add(cuka);
if (Request.UrlReferrer.IsNotNull())
Response.Redirect(Request.UrlReferrer.AbsoluteUri);
else
Response.Redirect("/");
}
}
Run Code Online (Sandbox Code Playgroud)
}
如果您对此引擎感兴趣,请告诉我们.
| 归档时间: |
|
| 查看次数: |
25319 次 |
| 最近记录: |