Mvc强类型actionlink中的查询字符串参数

3
我认为,在使用强类型ActionLink创建时,除了操作参数列表之外,没有可用于添加其他参数的重载。 我想要的是添加额外的参数,这些参数将在查询字符串中可用。
例如,在控制器MyController中使用操作MyAction(int id)Html.ActionLink(mc=>mc.MyAction(5),"My Action")会生成类似于MyController/MyAction/5的链接,但我希望添加查询字符串,就像这样。 MyController/MyAction/5?QS=Value。 是否有任何方法可以使用强类型ActionLinks来实现这一点?
3个回答

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

我之前写的代码是:@Html.ActionLink(" ", "Create" & "?parID=Automatic&parController=" & ViewData("Action").ToString, "Controller", New With {.area = "MyArea"}, New With {.class = "imgNew"}),这在MVC2中可用。但是当我尝试在MVC3上执行相同的代码时,出现了错误:潜在危险的请求路径值来自客户端。显然问题出在参数上,所以我进行了更正:@Html.ActionLink(" ", "Create", "Controller", New With {.area = "MyArea", .parID = "Automatic", .parController = ViewData("Action").ToString}, New With {.class = "imgNew"}). - Sebastián

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);
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接