gpt4 book ai didi

c# - 如何将参数添加到 View 中的当前 URL?

转载 作者:行者123 更新时间:2023-11-30 13:57:18 25 4
gpt4 key购买 nike

我有一个基于 ASP.NET MVC4 的 Web 应用程序,我在其中使用包含三种语言标志(图像)的布局。这些标志在整个站点中都是可见的。现在我想使用这些图像进行语言选择。为了以特定语言显示任何页面,我只需要向当前 URL 添加一个参数并加载它,然后我的 Controller 对其进行评估并在模型中设置正确的语言(或者在有请求中未指定语言)。

这是一个例子:

未指定语言:

http://example.com?StationId=12

指定语言:

http://example.com?StationId=12&lang=1033

我的问题是:如何在我的布局中形成一个围绕语言标志图像的链接,并始终指向当前加载的具有所有参数的 URL 加上一个新参数 &lang=1033 分别 ?lang=1033 如果只有语言参数?

换句话说:如何使用所有参数创建指向同一页面的链接并简单地向 URL 添加路由值?

更新:这是一个详细的例子

在我的 _Layout.cshtml 我有:

@{
var u_eng = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
var u_deu = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
var u_por = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
u_eng.Add("lang", "1033");
u_deu.Add("lang", "1031");
u_por.Add("lang", "1046");
}
.
.
.
<li>
<a href="@Url.RouteUrl(u_por)" class="Flag BR">BR</a>
</li>
<li>
<a href="@Url.RouteUrl(u_eng)" class="Flag US">US</a>
</li>
<li>
<a href="@Url.RouteUrl(u_deu)" class="Flag DE">DE</a>
</li>

现在,当我运行网站时,起始页上的链接工作正常,它们指向当前页面并将 lang=xy 参数添加到相应的 URL。

但是,当我转到另一个使用完全相同的布局文件并使用参数的页面时,链接无法正确构建:假设我转到了由此 URL 定义的子页面:

http://localhost:1234/Stations?position=up

页面本身得到正确显示。但是当我悬停或点击语言链接时,它们指向:

http://localhost:1234/Stations?lang=1031 而不是

http://localhost:1234/Stations?position=up&lang=1031

如您所见,任何现有参数都被省略了。

最佳答案

您可以使用当前路由值集合,向其添加新值,然后使用 url 帮助程序 RouteUrl 生成 url。要收集传递给页面的查询字符串参数,您可以遍历 HttpContext.Request.QueryString 字典:

@{
var currentRouteValues = new RouteValueDictionary(Url.RequestContext.RouteData.Values);
var queryString = Request.QueryString;
foreach (var key in queryString.AllKeys)
{
currentRouteValues.Add(key, queryString[key]);
}

currentRouteValues.Add("lang", "1033");
}

然后像这样使用它:

@Url.RouteUrl(currentRouteValues)

关于c# - 如何将参数添加到 View 中的当前 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21932635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com