2009-07-08 9 views
3

強く型付けされたアクションリンクからアクションリンクを作成する際に、アクションパラメータリスト以外のパラメータを追加するためのオーバーロードはないと思います。私が望むのは、クエリ文字列で利用可能な余分なパラメータを追加することです。
たとえば、コントローラMyAction(int id)をコントローラMyControllerで実行します。 MyController/MyAction/5のようなリンクが生成されますが、私が望むのはこのようなクエリ文字列を追加することです。 MyController/MyAction/5?QS =値。これを達成するために、強く型付けされたアクションリンクを使用する方法はありますか?MvcのQueryStringパラメータ強く型付けされたアクションリンク

答えて

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); 
} 
4
<%=Html.ActionLink(LinkName, Action, Controller, new { param1 = value1, param2 = value2 }, new { })%> 
+0

私はこれをやっていた:Html.ActionLink @(」」、 ToString、 "Controller"、{.area = "MyArea"}で新しく、{.class = "imgNew"}で新規作成)、この作品は、 "作成"& "?" parID =自動&parController = "&ViewData("アクション " MVC2では、私はMVC3で同じことをしようとするとき、私はこのエラーが表示されます:**潜在的に危険なRequest.Path値がクライアントから検出されました**。明らかにパラメータが問題だったので、@ Html.ActionLink( ""、 "Create"、 "Controller"、{.area = "MyArea"、.parID = "Automatic"、.parController = ViewData( " Action ")。ToString}、{.class =" imgNew "}で新規作成)。 –

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 
     ); 
関連する問題