Как передать 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" } }
, Тебе решать.