URL.Action(), inclusiv valorile rutelor (Programare, Asp.Net Mvc, Asp.Net Mvc 4, Html Helper)

hjavaher a intrebat.
a intrebat.

Am o aplicație ASP.Net MVC 4 și folosesc ajutorul Url.Action în felul următor: @Url.Action("Information", "Admin")

Această pagină este utilizată atât pentru adăugarea unui nou profil de administrator, cât și pentru editarea unui profil de administrator. URL-urile sunt după cum urmează:

 Adding a new:       http://localhost:4935/Admin/Information
 Editing Existing:   http://localhost:4935/Admin/Information/5 <==Admin ID

Când sunt în pagina Editing Existing secțiune a site-ului și decid că aș dori să adaug un nou administrator, fac clic pe următorul link:

 <a href="@Url.Action("Information", "Admin")">Add an Admin</a>

Problema este însă că linkul de mai sus se duce de fapt către http://localhost:4935/Admin/Information/5. Acest lucru se întâmplă numai atunci când mă aflu în pagina respectivă și editez un administrator existent. În orice alt loc de pe site se face legătura corectă către http://localhost:4935/Admin/Information

A mai văzut cineva acest lucru?

UPDATE:

RouteConfig:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );    

Comentarii

  • Ați verificat dacă înregistrările rutelor dvs. sunt corecte? –  > Por Spock.
  • Ce vrei să spui? Este destul de mult cea standard care a venit cu șablonul implicit –  > Por hjavaher.
2 răspunsuri
Emad Feiz

url de ieșire în mvc generat pe baza schemei de rutare curente.

deoarece metoda de acțiune Information necesită parametrul id, iar colecția de rute are id-ul url-ului solicitat curent (/Admin/Information/5), parametrul id obținut automat din valorile colecției de rute existente.

Pentru a rezolva această problemă, ar trebui să utilizați UrlParameter.Optional:

 <a href="@Url.Action("Information", "Admin", new { id = UrlParameter.Optional })">Add an Admin</a>

Comentarii

  • Cum putem face acest lucru în asp.net core? Nu există un UrlParameter.Optional –  > Por MOD.
SSadig

De asemenea, puteți utiliza în acest formular:

<a href="@Url.Action("Information", "Admin", null)"> Admin</a>

Comentarii

  • Nu, nu se poate. Setarea ultimului parametru al ajutorului de acțiune Url ca fiind nul are același efect ca și ignorarea acestuia. Se va utiliza metoda supraîncărcată cu doar doi parametri în care obiectul routeValues este nul. Pentru mai multe detalii, vă rugăm să consultați codul sursă legat mai jos: github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/… –  > Por webStuff.