2012-02-09 11 views
2

Html.ActionLink()でリンクを作成します。 URLから取得するクエリ文字列の条件に基づいて、URLにパラメータ文字列を追加します。Html.ActionLink()内のconcat文字列

<% 
strA = Request.QueryString["AA"]; 
strB = Request.QueryString["BB"]; 
strC = Request.QueryString["CC"]; 

if (!string.IsNullOrEmpty(strA)) 
{ 
%> 
    <%: Html.ActionLink(a.Name, Model.ActionName, Model.ControllerName, 
     new {aa = strA , tab = 2}, null)%> 
<% 
}else if(!string.IsNullOrEmpty(strB)){ 
%> 
    <%: Html.ActionLink(a.Name, Model.ActionName, Model.ControllerName, 
     new {bb = strB , tab = 2}, null)%> 
<% 
}else if(!string.IsNullOrEmpty(strA) && !string.IsNullOrEmpty(strB)){ 
%> 
    <%: Html.ActionLink(a.Name, Model.ActionName, Model.ControllerName, 
     new {aa = strA , bb = strB, tab = 2}, null)%> 
<%else{ %> 
    <%: Html.ActionLink(a.Name, Model.ActionName, Model.ControllerName, 
     new {tab = 2}, null)%> 
<% }%> 

これは私が何をしようとしたものです:私は、文字列の準備ができCONCAT

<% 
string url_add = ""; 
if (!string.IsNullOrEmpty(strA)) 
{ 
    url_add += "aa=strA"; 
}else if(!string.IsNullOrEmpty(strB)){ 
    url_add += "bb=strB"; 
}else if(!string.IsNullOrEmpty(strA) && !string.IsNullOrEmpty(strB)){ 
    url_add += "aa=strA&bb=strB"; 
}else{ 
    url_add += "tab=2"; 
} 
%> 

した後、私は以下のようにその文字列を置く:

<%: Html.ActionLink("My link", "my_action", "my_controller", new {url_add} , null) %> 

しかし、私はこれをしなかったときは、私のURLは"blahblah.com/url_add=aa=strA"です。

もっと良い解決方法を教えてください。

ありがとうございます。

答えて

1

ティティ、

問題はあなたがroutevalues辞書に単一プロパティ「オブジェクト」を追加しようとしているという事実、すなわちに関連している:あなたが追加され、この場合は

<%: Html.ActionLink("My link", "my_action", "my_controller", new {url_add} , null) %> 

routevalue:new {url_add}これはあなたが構築した純粋に連結された文字列です。このルート値はキー値のペアである必要があります。したがって、単一の変数を連結して追加するアプローチは機能しません。

ロジックフロー内の新しいroutevalues辞書を作成し、最後にアクションリンクに追加するだけで何かを試してみることをお勧めします(つまり、アクションリンクのビルドはあなたのロジックの最終行)。

var newRoutes = new RouteValueDictionary(); 
// if condition for strA matches 
newRoutes.Add("aa", strA); 
// if condition for strb matches 
newRoutes.Add("bb", strB); 

希望これはいくつかのアイデアを示します。

[編集] - 下のあなたのコメントに応じて、ここで@classオブジェクトを含む、あなたの必要な過負荷があります:

<%: Html.ActionLink("My link", "my_action", "my_controller", newRoutes, new Dictionary<string, object> { { "class", "selectedQ" } }) %> 
+0

おかげでジム。とにかく、このコードブロックをGlobal.asax.csに入れる必要がありますか? – titi

+0

titi - この小さなブロックは、strA変数などを定義する既存のコードに追加することができます –

+0

jim、私はリンク '%:Html.ActionLink(" My link "、" my_action "、" my_controller "、new {newRoutes}、null)%> 'が、URLは' blahblah.com/My_controller/My_action?newRoutes = System.Web.Routing.RouteValueDictionary'です。 – titi