ASP.net MVC sitio.maestro de enlace a través de HTML.ActionLink
-
20-08-2019 - |
Pregunta
Tengo el siguiente código en mi site.master
para un menú:
<ul id="menu">
<li><%= Html.ActionLink("My Contact Info", "DetailsbyUserName/" + Html.Encode(Page.User.Identity.Name), "Users")%></li>
</ul>
Cuando me pase por encima de la URL veo que se apunta a:
http://site/Users/DetailbyUserName/[name]
lo cual es correcto.
El problema es que cuando pongo un breakpoint en la Users
clase de controlador a continuación:
public ActionResult DetailsbyUserName(string loginName)
{
UserInfo user = repo.GetUserByName(loginName);
return View(user);
}
parece que el loginName
parámetro es siempre null
.
Alguna sugerencia?
Solución
El problema es que no tiene una Ruta configurada para especificar un parámetro llamado " loginName " ;.
Supongo que su ruta predeterminada está tragando su solicitud e intentando asignar el valor [nombre] a un parámetro llamado " id " ;. Si cambia el nombre del parámetro a & Quot; id & Quot; desde " loginName " ;, apuesto a que funcionará para usted.
Recuerde que el motor de enrutamiento asigna cada segmento de URL a un parámetro con nombre. La ruta predeterminada se ve así: "{controller}/{action}/{id}"
. Si desea tener un parámetro llamado & Quot; loginName & Quot ;, tendría que encontrar una ruta que tuviera los segmentos "{controller}/{action}/{loginName}"
, que fuera diferente de la ruta predeterminada, de modo que la ruta predeterminada no coincidió primero.
Otros consejos
probar:
Html.ActionLink("My Contact Info", "DetailsbyUserName", "Users", new { loginName = Html.Encode(Page.User.Identity.Name), null);
si el controlador es algo como esto:
public ActionResult DetailsbyUserName(string veryVeryLongParameterName);
Supongo que usted tiene que utilizar las nuevas { veryVeryLongParameterName = "YourParamValue" } en el ActionLink del routeValues parámetro.
Y también, necesita una ruta para que.
Yo soy muy nuevo en esto, al menos eso es lo que he entendido sobre ActionLinks, espero que alguien pueda explicarlo mejor.