重定向到另一个文件夹中的同一页面

时间:2014-05-23 22:08:52

标签: c# asp.net

如何重定向到另一个文件夹中的同一页面?

我有一个有两种不同语言的网站。如果单击语言链接按钮,是否可以重定向到其他语言/文件夹中的同一页面? 示例:如果我在注册页面中,当我单击其他语言链接按钮时,我希望被重定向到另一个语言/文件夹中的同一页面。

语言的主要链接在母版页中。

这可能吗?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您正在使用子文件夹来管理您的文化。 因此,您需要例外~/en/Default.aspx~/fr/Default.aspx

如果是这种情况,你可以使用这段代码。

        //For exemple: /en/Default.aspx
        string currentURL = HttpContext.Current.Request.Url.AbsolutePath;

        //Manage different part of the URL
        string[] urlParts = currentURL.Split(new string[] {"/"},StringSplitOptions.RemoveEmptyEntries);

        //Remove the old culture code
        IEnumerable<string> invariantUrlParts = urlParts.Skip(1);

        //Rebuild the URL
        string newUrl = String.Format("~/{0}/{1}", "fr", String.Join("/", invariantUrlParts));

        //Redirect to ~/fr/Default.aspx
        Response.Redirect(newUrl);

修改

如果你是单行的粉丝:

Response.Redirect(HttpContext.Current.Request.Url.AbsolutePath
.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries)
.Skip(1)
.Aggregate(String.Format("~/{0}", "fr"), (i, j) => i + "/" + j));

答案 1 :(得分:1)

假设您有一个包含所有语言的下拉列表,并且在选择时,您希望以所选语言加载相同的页面...

并假设您知道正在加载的当前语言(例如,在会话变量中),您可以:

作为下拉列表:

<select id="langSelector" onchange="changeCountry(this.value);">
  <option value="en">English</option>
  <option value="es">Spanish</option>
  <option value="fr">French</option>
</select>

在javascript中:

var currentLanguage = "en"; 
// for example in ASP.NET Webforms
// var currentLanguage = "<%= Session["currentLanguage"] %>";

function changeCountry(selectedLanguage) {
  var preLang = '/' + currentLanguage + '/',
      newLang = '/' + selectedLanguage + '/';  
  document.location = document.location.pathname.replace(preLangig, newLang);
}

说明:

在javascript document.location.pathname中将显示协议和域名之后的完整路径,如果您有一个简单的/en/,则可以将其替换为/fr/并再次加载其余内容。< / p>

要成为失败证明,您需要忽略此案replace,因此EneN也可以转换为fr

因为你会使用这个:

function changeCountry(selectedLanguage) {
  var newLang = '/' + selectedLanguage + '/';  
  document.location = 
     document.location.pathname.replace(
         /\/<%= Session["currentLanguage"].ToString().ToLower() %>\//i, 
         newLang);
}

所以你会:

.replace(/\/<%= Session["currentLanguage"].ToString().ToLower() %>\//i, newLang);