2014-12-17 12 views
6

Mam link akcji w widoku, potrzebuję go przekazać parametr zawierający łącznik (-). Zmiana konwencji nazw nie jest możliwa. Jak mam to zrobic?Jak przekazać routeValues, która zawiera łącznik za pośrednictwem actionlink w asp.net mvc 5

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

Ten powoduje błąd "Nieprawidłowy deklarator typu anonimowego", ponieważ zawiera myślnik. Zasadniczo potrzebuję ActionLink do generowania html jak poniżej.

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

Odpowiedz

3

Jeżeli jesteś pewien, że URL nie zmieni się znacznie od struktury masz określony można użyć znacznika zakotwiczenia i zbudować URL z Url.Action.

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

Sensem htmlhelpers mają pomóc generować html tak .. więc jeśli robi się w taki sposób, można spaść do html właściwe i po prostu zrobić to.

+0

Próbowałem tego. ale generuje "sap_ie", a nie "sap-ie" –

+0

to działa tylko z "danymi-" – InferOn

+0

@ user3273146 Zmodyfikowałem moją odpowiedź ... czy to działałoby? – scartag

1

Czy próbowałeś użyć przeciążenia metody ActionLink w postaci this?

@{ 
     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) 
+0

Próbowałem zarówno twoje podejście i scartag's Obie prace. Brakuje obszaru, a identyfikator powinien pochodzić z htmlattribute zamiast z valuevalues. Dzięki i tak –

+0

Ups, wygląda na to, że to przeoczyłem. Zaktualizowałem swoją odpowiedź zgodnie z twoją opinią. Dzięki! – AperioOculus

2

Chciałem tylko zwrócić uwagę, że nie, że sztuczka działa tylko z podkreślenia data atrybutów jest, to, że działa tylko z przechodzącej atrybutów HTML w ogóle. Dzieje się tak, ponieważ zmiana podkreśleń na myślniki w kontekście HTML ma sens, ponieważ podkreślenia nie są używane w atrybutach HTML. Jednak jest całkowicie uzasadnione, że masz parametr trasy z podkreśleniem, więc framework nie może zakładać żadnych założeń dotyczących twojego zamiaru.

Jeśli musisz przekazywać wartości tras za pomocą łączników, musisz użyć wartości RouteValueDictionary. Jest to po prostu ograniczenie anonimowych obiektów, których nie można pokonać.

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

Niestety, nie ma ActionLink przeciążenie, która akceptuje zarówno RouteValueDictionary dla routeValues i anonimowy obiekt dla htmlAttributes, więc przełączania jeden oznacza przełączania obu. Możesz technicznie użyć dowolnej implementacji IDictionary dla parametru htmlAttributes, więc możesz użyć tylko new Dictionary { { "id", "nav_abc" } }. To zależy od Ciebie.

Powiązane problemy