Html.ActionLink - 我想重定向到同一页面,但参数不同

时间:2015-02-21 14:14:18

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

我正在开发一个使用不同语言的新电子公文包,因此我想使用仅更改我使用的参数语言的html.actionlink。我到处检查过,似乎无法找到它!

我有这个代码sofar



@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 />
&#13;
&#13;
&#13;

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

1 个答案:

答案 0 :(得分:0)

@Html.ActionLink只是使用您提供的文本呈现指定操作的链接,并允许传递可选的路由参数(如您所用)。目前的网页没有真正的概念&#39;。

通过这种方式,您通常使用表单POST提交语言值,而不是GET,这是@Html.ActionLink将使用的。

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

@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" />
}

这会将所选语言提交给&#39; ChangeLanguage&#39;你的语言控制器的动作&#39; (只是编造名字,你可能想要选择更合理的东西!)

然后在您的控制器中,您可以执行您需要的任何逻辑以更改&#39;你的语言,坚持设置cookie / session / what:

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")