我使用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"
。
请有人告诉我更好的解决方案。
非常感谢。
答案 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" } }) %>