【问题标题】:Html.ActionLink - I want to redirect to the same page but with different parametersHtml.ActionLink - 我想重定向到同一个页面,但参数不同
【发布时间】:2015-02-22 00:49:39
【问题描述】:

我正在开发一个具有不同语言的新 ePortfolio,为此我想使用 html.actionlink,它只会更改我使用的参数语言。我到处查了,好像没找到!

我有这段代码

@Html.ActionLink("Engelska", "Index", new { lang = "Eng" })<br />
@Html.ActionLink("Tyska", "Index", new { lang = "Ger" })<br />
@Html.ActionLink("Svenska", "Index", new { lang = "Swe" })<br />
<br />
@Html.ActionLink("Engelska - About", "About", new { lang = "Eng" })<br />
@Html.ActionLink("Tyska - Über", "About", new { lang = "Ger" })<br />
@Html.ActionLink("Svenska - Om", "About", new { lang = "Swe" })<br />
<br />
@Html.ActionLink("Engelska - Exercises", "Exercises", new { lang = "Eng" })<br />
@Html.ActionLink("Tyska - Übungen", "Exercises", new { lang = "Ger" })<br />
@Html.ActionLink("Svenska - Övningar", "Exercises", new { lang = "Swe" })<br />

但最后我只想要 6 个,3 个用于操作方法,3 个用于语言,请有人帮我吗?

【问题讨论】:

  • 你想达到什么目的? 3 个控制器(索引、关于和练习)只需一个操作?
  • @rmorrin - Np,我正在努力实现我可以拥有 3 个 Html.ActionLink 来切换当前页面的语言和其他三个 Html.ActionLink 进入另一个使用相同语言的操作参数然后它现在是什么

标签: c# html razor model-view-controller


【解决方案1】:

@Html.ActionLink 仅使用您提供的文本呈现指定操作的链接,并允许传递可选的路由参数(如您所用)。没有“当前页面”的真正概念。

对于这种事情,您通常会使用表单 POST 来提交语言值,而不是 @Html.ActionLink 会使用的 GET。

一个简单的例子(原谅任何语法错误,从记忆中输入):

@using (Html.BeginForm("ChangeLanguage", "Language", FormMethod.Post))
{
    <input type="submit" value="Eng" name="lang" text="English" />
    <input type="submit" value="Ger" name="lang" text="German" />
    <input type="submit" value="Swe" name="lang" text="Swedish" />
}

这会将所选语言提交给您的“LanguageController”的“ChangeLanguage”操作(只是编造名称,您可能想要选择更明智的语言!)

然后在您的控制器中,您可以执行“更改”语言所需的任何逻辑,将设置保存在 cookie/session/whatever 中:

public class LanguageController : Controller
{
    [HttpPost]
    public ActionResult ChangeLanguage(string lang)
    {
        // change language, persist setting with cookie, session etc.

        // redirect to the page the user came from
        Redirect(Request.UrlReferrer);
    }
}

对于第二部分,关于其他页面的链接,您需要有一些方法来获取基于当前语言的本地化字符串,并将其用作您的链接文本。让我们假设一个方法GetLocalizedString(key)(同样是编名!)将为您返回正确的链接文本:

@Html.ActionLink(GetLocalizedString("ExercisesLink"), "Exercises")

【讨论】:

  • 谢谢!完美运行! :) 虽然我会说 Request.Referrer 实际上是 Request.UrlReferrer! :)
  • 哈哈,你说的很对!考虑到还不错:)我会适当地编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 2019-02-04
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
相关资源
最近更新 更多