Как передать строку запроса с помощью ActionLink?

Привет,

Я использую ASP.NET MVC 3, и мне нужно создать такой URL-адрес: MyURL.se/?CS.C2=113

Я пробовал это:

<%= Html.ActionLink(subItem.Name, "List", "Ad", new { CS.C2=subItem.Id}, null) %>

Но это вызовет: CS0746: Недопустимый декларатор члена анонимного типа. Члены анонимного типа должны быть объявлены с назначением члена, простым именем или доступом к члену.

CS.C2 является частью viewClass, который необходим действию.

Итак, как мне создать правильный URL-адрес для этой ссылки?

Изменить:

public ActionResult List(AdList data)
{
    //Fill data
    return View(data);
}

Я пробовал это: https://stackoverflow.com/a/10011614/1490727, но выдает:

Для этого объекта не определен конструктор без параметров. Описание: во время выполнения текущего веб-запроса возникло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде. Сведения об исключении: System.MissingMethodException: для этого объекта не определен конструктор без параметров.


person Ivy    schedule 08.07.2012    source источник
comment
Не могли бы вы также опубликовать код действия? Спасибо.   -  person Kevin Aenmey    schedule 08.07.2012
comment
Опубликовано, Adlist — это сложный класс, и мне нужно установить настройки AdList.CS.CS2.   -  person Ivy    schedule 08.07.2012


Ответы (2)


В итоге я создал его вручную следующим образом:

<a href="?CS.C2=<%=item.Id%>" title="<%=item.Name%>"><%=item.Name%></a>

Если возможно сгенерировать эту ссылку с помощью Action.Link, я был бы рад услышать об этом.

person Ivy    schedule 08.07.2012
comment
Вы пытались использовать синтаксис Razor, чтобы немного его очистить? Также вы можете создать собственный маршрут в Global.asax, который будет генерировать соответствующую структуру ссылок, которую вы хотите. - person Only Bolivian Here; 08.07.2012
comment
Я еще не перешел на Razor (в этом решении много работы). Я пытался создать новый настраиваемый маршрут, но у меня не получилось, поэтому описанное выше было простым исправлением. - person Ivy; 10.07.2012

Я мог бы сделать что-то вроде этого..

а. создать собственный вспомогательный HTML-код

public static MvcHtmlString MyActionLink(this HtmlHelper htmlHelper, string linkText,
string action, string controller, IDictionary<string, object> routeValues, 
object htmlAttributes)
{
         return htmlHelper.ActionLink
         (
            linkText, 
            action, 
            controller, 
            new RouteValueDictionary(routeValues), 
            HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)
         );
}

<сильный>б. Используйте это так

@Html.MyActionLink(subItem.Name, "List", "Ad", 
new Dictionary<string, object> { { "CS.C2", subItem.Id } }, null)

ОБНОВЛЕНИЕ

Вам не нужен помощник по пользовательским действиям. Вы можете напрямую передать RouteValueDictionary, как показано ниже,

@Html.ActionLink(subItem.Name, "List", "Ad", 
new RouteValueDictionary{ { "CS.C2", subItem.Id } }, null)
person VJAI    schedule 08.07.2012