Html.ActionLink()中的Concat字符串

时间:2012-02-09 00:59:30

标签: asp.net asp.net-mvc asp.net-mvc-2

我使用Html.ActionLink()创建一个链接。我根据从URL获得的查询字符串的条件将参数字符串添加到url。

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

在我准备完字符串之后,我把字符串放在下面:

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

但是当我这样做时,我的网址会"blahblah.com/url_add=aa=strA"

请有人告诉我更好的解决方案。

非常感谢。

1 个答案:

答案 0 :(得分:1)

蒂蒂,

问题与您尝试将单个属性“对象”添加到routevalues字典的事实有关,即:

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

在这种情况下,您要添加routevalue:new {url_add},它纯粹是您构建的连接字符串。这个routevalue需要成为一个keyvalue对,所以你连接和添加一个变量的方法是行不通的。

我建议您尝试在逻辑流程中构建一个全新的路由值字典,并在最后将其添加到actionlink上(即actionlink的构建仅在你的逻辑的最后一行。)

e.g。

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

希望这能给出一些想法。

[edit] - 根据您的评论,以下是您所需的重载,包括@class对象:

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