Mvc强类型动作链接中的QueryString参数

时间:2009-07-08 08:07:07

标签: asp.net-mvc

我认为在通过强类型操作链接创建actionlink时,没有可用于添加除动作参数列表之外的参数的重载。我想要的是添加额外的参数,这些参数将在查询字符串中提供。
例如,在控制器 MyController 中使用操作 MyAction(int id) Html.ActionLink(mc => mc.MyAction(5),“我的行动”)会产生类似 MyController / MyAction / 5 的链接,但我想要的是追加像这样的查询。 的 myController的/ MyAction / 5?QS =值即可。有没有办法,使用强类型的动作链接来实现这一点。

3 个答案:

答案 0 :(得分:4)

<%=Html.ActionLink(LinkName, Action, Controller, new { param1 = value1, param2 = value2 }, new { })%>

答案 1 :(得分:1)

为此创建自定义帮助程序。尝试这样的事情:

public static string MyActionLinkWithQuery<TController>(this HtmlHelper helper, Expression<Action<TController>> action, string linkText,
    RouteValueDictionary query) where TController : Controller
{
    RouteValueDictionary routingValues = ExpressionHelper.GetRouteValuesFromExpression(action);

    foreach(KeyValuePair<string, object> kvp in query)
        routingValues.Add(kvp.Key, kvp.Value);

    return helper.RouteLink(linkText, routingValues, null);
}

答案 2 :(得分:0)

您无需创建扩展方法,只需更改路由配置:

  routes.MapRoute(null,
       "MyController/MyAction/{id}",
        new { controller = "MyController", action = "MyAction", id="" } // Defaults
       );


        routes.MapRoute(
       null
      , // Name
       "{controller}/{action}", // URL
       new { controller = "MyController", action = "MyAction" } // Defaults
       );