将相同的查询字符串参数应用于ASP.MVC中的所有链接

时间:2015-03-17 09:00:50

标签: asp.net-mvc html.actionlink

我正在使用查询字符串来决定我的MVC应用程序应该使用哪个数据库。

http://localhost/control_groups?server=test-server

所以我创建了一个ApplicationController,它是我所有其他控制器的超类,它每次都抓取这个参数并将它放在ViewBag中。

但是需要将参数添加到我的所有链接中。手动添加它们似乎需要做很多工作:

<li>@Html.ActionLink("Control types", "Index", "control_types", new { server = ViewBag.ServerName},null)</li>

是否有更智能的方法为所有生成的链接自动设置此内容?

1 个答案:

答案 0 :(得分:2)

您可以为HTMLHelper

编写扩展程序
public static class ActionLinkExtension
{
    public static MvcHtmlString CustomActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)
    {
        var routeDictionary = new RouteValueDictionary(routeValues);
        //Add the server=test-server to all action link
        routeDictionary.Add("server", "test-server");
        return htmlHelper.ActionLink(linkText, actionName, controllerName, routeDictionary, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
    }
}

在剃刀视图中使用扩展方法

<li>@Html.CustomActionLink("Control types", "Index", "control_types", null, null)</li>