2011-01-09 3 views
0

J'ai des problèmes avec un problème particulier, j'espérais que quelqu'un puisse m'aider. J'ai terminé le tutoriel de MVC Music Store, et maintenant j'essaie d'ajouter quelques fonctionnalités d'administrateur - pratique comme je vais devoir le faire dans une application MVC dans mon travail. L'application utilise l'API d'adhésion aspnet, et ce que j'ai fait jusqu'ici est créé une vue pour lister les utilisateurs.Aide pour le contrôleur MVC: passage d'une chaîne de la vue au contrôleur

Ce que je veux être en mesure de faire, c'est de cliquer sur le nom de l'utilisateur afin de changer son mot de passe. Pour essayer de porter le nom d'utilisateur au contrôleur changeUserPassword (personnalisé). J'ai enregistré une nouvelle route dans le fichier global.asax.cs afin d'afficher le nom d'utilisateur dans l'URL, qui fonctionne jusqu'à présent.

UserList Voir

<%: Html.RouteLink(user.UserName, "AdminPassword", new { controller="StoreManager", action="changeUserPassword", username = user.UserName }) %> 

Global.asax.cs

routes.MapRoute(
       "AdminPassword", //Route name 
       "{controller}/{action}/{username}", //URL with parameters 
       new { controller = "StoreManager", action = "changeUserPassword", username = UrlParameter.Optional} 
       ); 

Alors maintenant, l'URL ressemble à ceci quand je l'atteins vue changeUserPassword:

http://localhost:51236/StoreManager/changeUserPassword/Administrator

est ici l'action GET changeUserPassword:

public ActionResult changeUserPassword(string username) 
    { 
     ViewData["username"] = username; 


     return View(); 
    } 

Je voulais enregistrer le nom d'utilisateur dans ViewData comme je voudrais l'utiliser dans l'EEG changeUserPassword à des fins d'affichage, et aussi en tant que valeur cachée dans la forme. C'est afin de le passer à travers pour me permettre de réinitialiser le mot de passe. Après avoir débogué à travers le code, il semble que 'nom d'utilisateur' est nul.

Comment puis-je faire en sorte que le nom d'utilisateur passe du Html.RouteLink à l'action changeUserPassword?

Toute aide serait appréciée :)

Voici mon code complet: UserList.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<System.Web.Security.MembershipUserCollection>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    UserList 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>UserList</h2> 

    <table> 
     <tr> 
      <th>User Name</th> 
      <th>Last Activity date</th> 
      <th>Locked Out</th> 
     </tr> 
     <%foreach (MembershipUser user in Model){ %> 


     <tr> 
      <td><%: Html.RouteLink(user.UserName, "AdminPassword", new { controller="StoreManager", action="changeUserPassword", username = user.UserName }) %></td> 
      <td><%: user.LastActivityDate %></td> 
      <td><%: user.IsLockedOut %></td> 
     </tr> 


     <% }%> 
    </table> 


</asp:Content> 

changeUserPassword.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<musicStoreMVC.ViewModels.ResetPasswordAdmin>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    changeUserPassword 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Change Password: <%: ViewData["username"] %></h2> 

    <% using (Html.BeginForm()) {%> 
     <%: Html.ValidationSummary(true) %> 

     <fieldset> 
      <legend>Fields</legend> 


      <div class="editor-label"> 
       <%: Html.Hidden("username",ViewData["username"]) %> 
       <%: Html.LabelFor(model => model.password) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.password) %> 
       <%: Html.ValidationMessageFor(model => model.password) %> 
      </div> 

      <div class="editor-label"> 
       <%: Html.LabelFor(model => model.confirmPassword) %> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBoxFor(model => model.confirmPassword) %> 
       <%: Html.ValidationMessageFor(model => model.confirmPassword) %> 
      </div> 

      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 

    <% } %> 

    <div> 
     <%: Html.ActionLink("Back to List", "Index") %> 
    </div> 

</asp:Content> 

Mes actions

public ActionResult UserList() 
     { 
      var users = Membership.GetAllUsers(); 

      return View(users); 
     } 

     public ActionResult changeUserPassword(string username) 
     { 
      ViewData["username"] = username; 


      return View(); 
     } 
+0

Quelles autres routes avez-vous? – SLaks

+0

juste l'itinéraire indiqué ci-dessus, et l'itinéraire par défaut. – 109221793

+0

Votre code fonctionne bien ici :)? – ebb

Répondre

1

Quelque chose ne fonctionne pas correctement avec vos itinéraires.

Si vous accédez à cette URL, et de définir un point d'arrêt dans la méthode d'action changeUserPassword - vous probable voir la valeur de nom d'utilisateur correctement:

http://localhost:51236/StoreManager/changeUserPassword?username=Administrator

+0

@MartinHN, en naviguant en utilisant cette URL Je peux voir le nom d'utilisateur parfaitement. Des idées sur la façon dont je peux résoudre ce problème avec les routes alors? – 109221793

+0

Vous pouvez essayer de modifier la route comme suit: routes.MapRoute ("AdminPassword", "StoreManager/changeUserPassword/{nom d'utilisateur}", nouveau {nom d'utilisateur = UrlParameter.Optional}); – MartinHN

+0

Salut, j'ai changé le chemin que vous avez mentionné ci-dessus, mais maintenant l'URL affiche comme ceci "http: // localhost: 51236/StoreManager/changeUserPassword/Utilisateur? Controller = StoreManager & action = changeUserPassword" quand je clique sur le lien. Des idées?? J'ai également essayé de supprimer tout sauf 'nom d'utilisateur = user.UserName' du routelink, mais cela n'a pas fonctionné non plus. – 109221793

Questions connexes