Помощь с контроллером MVC: передача строки из представления в контроллер - PullRequest
0 голосов
/ 09 января 2011

У меня проблемы с одной конкретной проблемой, я надеялся, что кто-нибудь может мне помочь.

Я закончил учебник MVC Music Store, и теперь я пытаюсь добавить некоторые функции администратора - попрактикуйтесь, поскольку мне придется делать это в приложении MVC на работе. Приложение использует API членства в aspnet, и то, что я сделал до сих пор, - это создание списка пользователей.

Что я хочу сделать, это нажать на имя пользователя, чтобы изменить его пароль. Попробовать перенести имя пользователя в контроллер changeUserPassword (по индивидуальному заказу). Я зарегистрировал новый маршрут в файле global.asax.cs, чтобы отобразить имя пользователя в URL-адресе, который работает до сих пор.

UserList View

<%: 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}
                );

Так что теперь, когда я достигаю представления changeUserPassword, URL выглядит так:

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

Вот действие GET changeUserPassword:

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


        return View();
    }

Я хотел сохранить имя пользователя в ViewData, так как хотел бы использовать его в GET changeUserPassword для отображения, а также в качестве скрытого значения в форме. Это сделано для того, чтобы я мог сбросить пароль.

После отладки кода кажется, что 'username' имеет значение null.

Как я могу заставить это работать, чтобы имя пользователя переносилось из Html.RouteLink в действие changeUserPassword?

Буду признателен за любую помощь:)

Вот мой полный код: 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>

Мои действия

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

            return View(users);
        }

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


            return View();
        }

1 Ответ

1 голос
/ 09 января 2011

Что-то не так с вашими маршрутами.

Если вы перейдете по этому URL-адресу и зададите точку останова в методе действия changeUserPassword - вы, вероятно, увидите правильное значение имени пользователя:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...