Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC通过ActionLink生成具有不同区域性参数的url_C#_Asp.net Mvc_Routes - Fatal编程技术网

C# ASP.NET MVC通过ActionLink生成具有不同区域性参数的url

C# ASP.NET MVC通过ActionLink生成具有不同区域性参数的url,c#,asp.net-mvc,routes,C#,Asp.net Mvc,Routes,我在路由中有以下几种url模式: {lang}/package/{packageID} {lang}/package/{packageID}/Edit/{partNumber} ... layout.cshtml中有一个页脚,该页脚为用户提供了不同的文化链接以更改网站的语言。当用户点击链接时,我希望它能改变语言并停留在当前页面,所以我用Razor呈现链接如下: @Html.ActionLink("English", ViewContext.RouteData.Values["Action"],

我在路由中有以下几种url模式:

{lang}/package/{packageID}
{lang}/package/{packageID}/Edit/{partNumber}
...
layout.cshtml中有一个页脚,该页脚为用户提供了不同的文化链接以更改网站的语言。当用户点击链接时,我希望它能改变语言并停留在当前页面,所以我用Razor呈现链接如下:

@Html.ActionLink("English", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], new { lang = "en-us"}, null)
@Html.ActionLink("Traditional Chinese", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], new { lang = "zh-tw"}, null)
@Html.ActionLink("Japanese", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], new { lang = "ja-jp"}, null)
...
但有一个问题是,我需要将上面提到的其他参数相应地传递给页面,以使用户保持在当前页面中

在这种情况下,我如何实现目标


谢谢

您可以使用
返回重定向(HttpContext.Request.urlReferer.ToString())
返回以将用户带回他们所在的页面,而不必担心再次传递参数

流程将是:

  • 用户单击一个链接,如
    @Html.ActionLink(“英语”,ViewContext.RouteData.Values[“Action”],ViewContext.RouteData.Values[“Controller”],new{lang=“en-us”},null)

  • 您可以更改控制器动作方法中的语言

  • 通过调用
    returnredirect(HttpContext.Request.urlreferer.ToString())将用户带回他们所在的页面来自同一操作方法

  • 您可以使用
    返回重定向(HttpContext.Request.urlReferer.ToString())
    返回以将用户带回他们所在的页面,而不必担心再次传递参数

    流程将是:

  • 用户单击一个链接,如
    @Html.ActionLink(“英语”,ViewContext.RouteData.Values[“Action”],ViewContext.RouteData.Values[“Controller”],new{lang=“en-us”},null)

  • 您可以更改控制器动作方法中的语言

  • 通过调用
    returnredirect(HttpContext.Request.urlreferer.ToString())将用户带回他们所在的页面来自同一操作方法

  • 您可以创建扩展方法作为创建语言相关链接的帮助器:

    public static class LanguageExtensions
    {
        public static RouteValueDictionary ForLang(this RouteValueDictionary dict, string lang)
        {
            var cloned = new RouteValueDictionary(dict);
            cloned["lang"] = lang;
            return cloned;
        }
    }
    
    现在您可以这样使用它:

    @Html.ActionLink("English", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], ViewContext.RouteData.ForLang("en-us"), null)
    

    您可以创建扩展方法作为创建语言相关链接的帮助器:

    public static class LanguageExtensions
    {
        public static RouteValueDictionary ForLang(this RouteValueDictionary dict, string lang)
        {
            var cloned = new RouteValueDictionary(dict);
            cloned["lang"] = lang;
            return cloned;
        }
    }
    
    现在您可以这样使用它:

    @Html.ActionLink("English", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], ViewContext.RouteData.ForLang("en-us"), null)
    

    ASP.NET MVC将路由来自当前请求的段,如果这些段早于您显式提供值的段。如果您可以使您的
    {lang}
    段成为路线中的最后一段,您想要的将自动发生。@GSerg thnak感谢您的评论,但这似乎不是一个好方法,它实际上在这种情况下会起作用。然而,这将是对url模式的一个约束,每个模式都需要将{lang}放在末尾,并对用户发出请求的顺序进行假设。但这是一个提示,如果我仍然找不到其他解决方案,我会尝试。非常感谢。ASP.NET MVC将路由来自当前请求的段,如果这些段早于您显式提供值的段。如果您可以使您的
    {lang}
    段成为路线中的最后一段,您想要的将自动发生。@GSerg thnak感谢您的评论,但这似乎不是一个好方法,它实际上在这种情况下会起作用。然而,这将是对url模式的一个约束,每个模式都需要将{lang}放在末尾,并对用户发出请求的顺序进行假设。但这是一个提示,如果我仍然找不到其他解决方案,我会尝试。非常感谢。你好,布鲁诺,谢谢你的回答,在发布这个问题之前我已经尝试过这种方法,它很有效。但是我想知道是否有比重定向更好的方法,因为它需要花费更多的时间来做另一个导航。嗨,布鲁诺,谢谢你的回答,我在发布这个问题之前尝试过这种方法,它很有效。但是我想知道是否有一种方法比重定向更好,因为它需要花费更多的时间来进行另一次导航。谢谢,这种方法简单明了,很接近我的需要。谢谢,这种方法简单明了,很接近我的需要。