の使用ActionLinkCombined
私のソリューションは、qwerty1000年代に似ています。拡張メソッドActionQueryLink
を作成しました。これは、標準ActionLink
と同じ基本パラメータを取ります。 Request.QueryStringをループし、まだ見つからないパラメータをRouteValues
辞書に追加します(必要に応じて元のクエリ文字列を上書きできます)。
は使用が可能な任意のキーを追加し、既存の文字列を保持しなくするには、次の
<%= Html.ActionQueryLink("Click Me!","SomeAction") %>
ユーザーは次のようになり、既存の文字列を保存し、新しいキーを追加するには:
<%= Html.ActionQueryLink("Click Me!","SomeAction", new{Param1="value1", Param2="value2"} %>
以下のコード2つの用途のためですが、他のオーバーロードを追加して、必要に応じて他のActionLink
の拡張と一致させるのはかなり簡単です。
public static string ActionQueryLink(this HtmlHelper htmlHelper,
string linkText, string action)
{
return ActionQueryLink(htmlHelper, linkText, action, null);
}
public static string ActionQueryLink(this HtmlHelper htmlHelper,
string linkText, string action, object routeValues)
{
var queryString =
htmlHelper.ViewContext.HttpContext.Request.QueryString;
var newRoute = routeValues == null
? htmlHelper.ViewContext.RouteData.Values
: new RouteValueDictionary(routeValues);
foreach (string key in queryString.Keys)
{
if (!newRoute.ContainsKey(key))
newRoute.Add(key, queryString[key]);
}
return HtmlHelper.GenerateLink(htmlHelper.ViewContext.RequestContext,
htmlHelper.RouteCollection, linkText, null /* routeName */,
action, null, newRoute, null);
}
ですか?質問に対する剃刀構文の更新はどうですか? – MrBoJangles
そこに行く..私は4年しかかかりませんでした..( - : –