Строка Concat в Html.ActionLink () - PullRequest
       8

Строка Concat в Html.ActionLink ()

2 голосов
/ 09 февраля 2012

Я создаю ссылку с помощью 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) %>

Но когда я это сделал, мой URL будет "blahblah.com/url_add=aa=strA".

Может кто-нибудь показать мне лучшее решение, пожалуйста.

Большое спасибо.

1 Ответ

1 голос
/ 09 февраля 2012

titi,

проблема связана с тем, что вы пытаетесь добавить единственное свойство 'object' в словарь значений маршрута, то есть:

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

в этом случае,вы добавляете значение маршрута: new {url_add}, которое является чисто составной строкой, которую вы создали.Это значение маршрута ДОЛЖНО быть парой значений ключей, поэтому ваш подход к объединению и добавлению одной переменной просто не будет работать.

Я бы посоветовал вам попробовать что-то вроде создания нового словаря значений маршрутов 'внутри логического потока и только добавляя его в actionlink в самом конце (т. е. сборка actionlink происходит только один раз в последней строке вашей логики).

например

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" } }) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...