Collegamento ASP.net MVC site.master utilizzando HTML.ActionLink
-
20-08-2019 - |
Domanda
Ho il seguente codice nel mio site.master
per un menù:
<ul id="menu">
<li><%= Html.ActionLink("My Contact Info", "DetailsbyUserName/" + Html.Encode(Page.User.Identity.Name), "Users")%></li>
</ul>
Quando passo il mouse sopra l'URL vedo che punta a:
http://site/Users/DetailbyUserName/[name]
che è corretto.
Il problema è che quando inserisco un punto di interruzione nel file Users
classe controller di seguito:
public ActionResult DetailsbyUserName(string loginName)
{
UserInfo user = repo.GetUserByName(loginName);
return View(user);
}
sembra che il loginName
il parametro è sempre null
.
Eventuali suggerimenti?
Soluzione
Il problema è che non è stata impostata una route per specificare un parametro chiamato " loginName " ;.
Suppongo che il tuo percorso predefinito stia ingoiando la tua richiesta e sto provando ad assegnare il valore [nome] a un parametro chiamato " id " ;. Se si modifica il nome del parametro in & Quot; id & Quot; da " loginName " ;, Scommetto che funzionerà per te.
Ricorda che il motore di routing associa ciascun segmento URL a un parametro denominato. Il percorso predefinito è simile a: "{controller}/{action}/{id}"
. Se vuoi avere un parametro chiamato & Quot; loginName & Quot ;, dovresti trovare una Route che avesse i segmenti "{controller}/{action}/{loginName}"
, che era diversa dalla route predefinita, in modo che la route predefinita non corrisponde prima.
Altri suggerimenti
Tentativo:
Html.ActionLink("My Contact Info", "DetailsbyUserName", "Users", new { loginName = Html.Encode(Page.User.Identity.Name), null);
se il tuo controller è qualcosa del genere:
public ActionResult DetailsbyUserName(string veryVeryLongParameterName);
Immagino che tu debba utilizzare new {veryVeryLongParameterName = "YourParamValue" } nel parametro routeValues di ActionLink.
E inoltre, hai bisogno di un percorso per quello.
Anch'io sono molto nuovo in questo, almeno questo è quello che ho capito di ActionLinks, spero che qualcuno possa spiegarlo meglio.