2015-05-04 10 views
28

Podczas określania asp-controller i asp-action dla łącza, jaka jest składnia dla przekazywania atrybutu id?TagHelper do przekazywania wartości tras jako część linku

E.g. Jeśli chciałbym połączyć się z adresem URL edycji dla danego obiektu, wymagany adres URL będzie na przykład /user/edit/5.

Czy istnieje metoda, aby to osiągnąć za pomocą TagHelpers, czy nadal musimy cofnąć się do @Html.ActionLink()?

Odpowiedz

43

Możesz użyć przedrostka atrybutu asp-route-, aby przedłużyć nazwy zmiennych trasy.

Przykład: <a asp-action="Edit" asp-route-id="10" asp-route-foo="bar">Edit</a>

+1

nie mogłem dostać to do pracy, bo mój "asp-route-foobar" nie pasuje do mojej trasy: "routes.MapRoute (" yearNoCombo ", template:" {controller = Strona główna}/{akcja = Indeks}/{foobar?}/{co ever1}/{whatever2} "); - nazwy tras muszą być zgodne. HTH inne. –

+0

Oprócz powyższego komentarza należy upewnić się, że trasy są poprawnie skonfigurowane, aby uniknąć pojawiania się bitów trasy jako parametru w kodzie HTML Korzystając z MapRoute lub z adnotacji o trasie na twoich metodach – Calanus

3

można przekazać niestandardowy identyfikator za pomocą poniższego kodu:

<a asp-controller="User" asp-action="Edit" asp-route-id="@item.ID">Edit</a> 
12

Chciałbym zaproponować kombinację dwóch innych odpowiedzi, ale z odrobiną dodatkowego wyjaśnienia.

Użyjesz prefiksu atrybutu asp-route-{name}, gdzie {name} jest nazwą parametru trasy, którego chcesz użyć. Innymi słowy, jeśli numer 5 w trasie jest przekazywana do sterownika jako wartość ID, można mieć:

<a asp-controller="User" asp-action="Edit" asp-route-id="@item.ID">Edit</a> 

lub jeśli parametr chciał przejść na trasie był item.UserName następnie

<a asp-controller="User" asp-action="Edit" asp-route-username="@item.UserName">Edit</a> 

A jeśli miał oba parametry następnie

<a asp-controller="User" asp-action="Edit" asp-route-id="@item.Id" asp-route-username="@item.UserName">Edit</a> 
+0

To z pewnością miało więcej sensu niż inne . Czy możesz również mieć wiele asp-route- {nazwa parametru} w tym samym ? Pomogło to w rozwiązaniu problemu. Nieprawidłowe powiązanie podczas próby wysłania klucza zagranicznego CompanyId z powrotem, ponieważ korzystał z identyfikatora i zamiast tego umieszczał go w identyfikatorze klucza podstawowego zamówienia. – Edward

+1

Tak, możesz. Według http://www.davepaquette.com/archive/2015/06/01/mvc-6-anchor-tag-helper.aspx Możesz podać wartości dla tylu parametrów, ile potrzebujesz, używając atrybutów * asp-route -* prefiks. Nie sądzę, że możesz mieć dwa parametry o tej samej nazwie - jest tu prośba o funkcję/problem tutaj https://github.com/aspnet/Mvc/issues/4560 –

+0

Więc jeśli dobrze to przeczytam, obecnie tam to sposób przekazywania list tylko w metodzie helpera akcji, a nie w pomocnikach tagów kotwicy. – Edward

Powiązane problemy