2012-02-09 81 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)%> 
<% }%> 

這就是我試圖做的:

<% 
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"; 
} 
%> 

後,我Concat的字符串準備好了,我把下面那個字符串:

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

,但是當我這樣做,我的網址將爲"blahblah.com/url_add=aa=strA"

任何人都可以告訴我更好的解決方案。

非常感謝。

回答

1

蒂蒂,

的問題是有關的事實,你正在嘗試一個單一的財產「對象」添加到routevalues字典,即:

<%: Html.ActionLink("My link", "my_action", "my_controller", new {url_add} , null) %> 
在這種情況下

,要添加路徑值:new {url_add},它完全是您構建的連接字符串。這個routevalue需要是一個keyvalue對,所以你連接和添加一個變量的方法是行不通的。

我建議你沿着在邏輯流程內創建一個全新的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 2012-02-09 10:03:27

+0

titi - 這個小塊可以被添加到現有的代碼,你定義的strA變量等 – 2012-02-09 10:19:28

+0

吉姆,我試圖添加鏈接'<%:Html.ActionLink(「我的鏈接」,「my_action」,「my_controller」,新{newRoutes},null)%>',但url是'blahblah.com/My_controller/My_action?newRoutes = System.Web.Routing.RouteValueDictionary'。 – titi 2012-02-10 02:01:45