2009-06-29 6 views
2

je le code suivant dans mon site.master pour un menu:ASP.net MVC lien de l'aide Html.ActionLink

<ul id="menu">    
    <li><%= Html.ActionLink("My Contact Info", "DetailsbyUserName/" + Html.Encode(Page.User.Identity.Name), "Users")%></li> 
</ul> 

Quand je passe la souris sur l'URL que je vois qu'il pointe vers:

http://site/Users/DetailbyUserName/[name]

ce qui est correct.

Le problème est que quand je mets un point d'arrêt dans la classe de contrôleur Users ci-dessous:

public ActionResult DetailsbyUserName(string loginName) 
{ 
    UserInfo user = repo.GetUserByName(loginName); 
    return View(user); 
} 

il semble que le paramètre loginName est toujours null.

Des suggestions?

Répondre

3

Le problème est que vous n'avez pas configuré de routage pour spécifier un paramètre appelé "nom_login".

Je suppose que votre Route par défaut avale votre requête, et essaye d'assigner la valeur [name] à un paramètre appelé "id". Si vous changez le nom du paramètre en "id" de "loginName", je parie que cela fonctionnera pour vous. N'oubliez pas que le moteur de routage mappe chaque segment d'URL à un paramètre nommé. La route par défaut ressemble à: "{controller}/{action}/{id}". Si vous voulez avoir un paramètre nommé "nom_login", vous devez créer un itinéraire ayant les segments "{controller}/{action}/{loginName}", qui était différent de l'itinéraire par défaut, de sorte que l'itinéraire par défaut ne le corresponde pas en premier.

0

essayer:

Html.ActionLink("My Contact Info", "DetailsbyUserName", "Users", new { loginName = Html.Encode(Page.User.Identity.Name), null); 

si votre contrôleur est quelque chose comme ceci:

public ActionResult DetailsbyUserName(string veryVeryLongParameterName); 

Je suppose que vous devez utiliser un nouveau {veryVeryLongParameterName = "YourParamValue"} dans le paramètre routeValues ​​du ActionLink.

Et aussi, vous avez besoin d'un itinéraire pour cela.

Je suis très nouveau à ce sujet aussi, du moins c'est ce que j'ai compris d'ActionLinks, j'espère que quelqu'un pourra mieux l'expliquer.

Questions connexes