2009-07-08 7 views
3

Я думаю, что нет никакой перегрузки для добавления параметров, отличных от списка параметров действия, при создании actionlink через строго типизированные ссылки действий. Я хочу добавить дополнительные параметры, которые будут доступны в querystring.
Например, с действием MyAction (int id) в контроллере MyController. Html.ActionLink (mc => mc.MyAction (5), «My Action») будет производить ссылку что-то вроде MyController/MyAction/5, но то, что я хочу, это добавить такую ​​последовательность запросов. MyController/MyAction/5? QS = Значение. Есть ли способ, используя строго типизированные actionlinks, для достижения этого.Параметры QueryString в Mvc сильно типизированных actionlinks

ответ

1

Создайте для этого специальный помощник. Попробуйте что-то вроде этого:

public static string MyActionLinkWithQuery<TController>(this HtmlHelper helper, Expression<Action<TController>> action, string linkText, 
    RouteValueDictionary query) where TController : Controller 
{ 
    RouteValueDictionary routingValues = ExpressionHelper.GetRouteValuesFromExpression(action); 

    foreach(KeyValuePair<string, object> kvp in query) 
     routingValues.Add(kvp.Key, kvp.Value); 

    return helper.RouteLink(linkText, routingValues, null); 
} 
4
<%=Html.ActionLink(LinkName, Action, Controller, new { param1 = value1, param2 = value2 }, new { })%> 
+0

Я делал это: @ Html.ActionLink (»», «Создать» & «? ParID = Automatic & parController =» & ViewData («Действие»). ToString, «Контроллер», Создать с помощью {.area = "MyArea"}, Создать с {.class = "imgNew"}), эта работа в MVC2, но когда я пытаюсь сделать то же самое на MVC3, я получаю эту ошибку: ** Потенциально опасное значение Request.Path было обнаружено у клиента **. Очевидно, что параметр был проблемой, поэтому я исправил: @ Html.ActionLink («", "Создать", "Контроллер", Создать с {.area = "MyArea", .parID = "Автоматически", .parController = ViewData (" «Действие»). ToString}, New With {.class = "imgNew"}). –

0

Вам не нужно создавать методы расширения, просто изменить конфигурацию маршрутизации:

routes.MapRoute(null, 
     "MyController/MyAction/{id}", 
     new { controller = "MyController", action = "MyAction", id="" } // Defaults 
     ); 


     routes.MapRoute(
     null 
     , // Name 
     "{controller}/{action}", // URL 
     new { controller = "MyController", action = "MyAction" } // Defaults 
     ); 
Смежные вопросы