Как передать routeValues, который содержит дефис через actionlink в asp.net mvc 5

Я имею в виду actionlink, мне нужно передать параметр, содержащий дефис (-). Изменение названия соглашения невозможно. Как мне это сделать?

<li>@Html.ActionLink("abc", "abc", "abc", new { area = "",sap-ie="Edge" }, new { id = nav_abc"})</li>

Это дает мне ошибку "Неверный анонимный тип объявления", так как он содержит дефис. В основном мне нужно actionlink для генерации html, как показано ниже.

<a href=".../abc?sap-ie=Edge" id="nav_abc" >abc</a>

3 ответа

Решение

Если вы уверены, что URL-адрес не сильно изменится со структурой, которую вы указали, вы можете использовать тег привязки и построить URL-адрес из Url.Action,

<a href='@Url.Action("abc", "abc")?sap-ie=Edge'>abc</a>

Весь смысл htmlhelpers состоит в том, чтобы в любом случае помогать генерировать html... так что, если он мешает, вы можете перейти к надлежащему html и просто сделать это.

Вы пытались использовать эту перегрузку метода ActionLink?

    @{
        var routeValues = new RouteValueDictionary();
        routeValues.Add("sap-ie", "Edge");
        routeValues.Add("area", "");

        var attributes = new Dictionary<string, object>();
        attributes.Add("Id", "nav_abc");
    }
    @Html.ActionLink("Go to contact page", "Contact", routeValues, attributes)

Просто хотел отметить, что это не то, что трюк с подчеркиванием работает только с data атрибуты, это то, что он работает только с передачей атрибутов HTML в целом. Это связано с тем, что имеет смысл изменить подчеркивания на дефисы в контексте HTML, так как подчеркивания не используются в атрибутах HTML. Тем не менее, для вас совершенно правильно иметь параметр маршрута с подчеркиванием, поэтому структура не может делать никаких предположений относительно вашего намерения.

Если вам нужно передать значения маршрута с дефисами, вы должны использовать RouteValueDictionary, Это просто ограничение анонимных объектов, которые невозможно преодолеть.

<li>@Html.ActionLink("abc", "abc", "abc", new RouteValueDictionary { { "area", "" }, "sap-ie", "Edge" } }, new RouteValueDictionary { { "id", "nav_abc" } })</li>

К сожалению нет ActionLink перегрузка, которая принимает как RouteValueDictionary за routeValues и анонимный объект для htmlAttributesТаким образом, переключение одного означает переключение обоих. Технически вы можете использовать любой IDictionary реализация для htmlAttributes параметр, так что вы можете использовать только new Dictionary { { "id", "nav_abc" } }, Тебе решать.

Другие вопросы по тегам