在MVC 2中传递Html.ActionLink中的字符串

时间:2011-01-09 00:24:14

标签: c# asp.net-mvc actionlink

我已经完成了MVC音乐商店应用程序,现在我正在为练习做自己的修改,也准备让我在工作中做类似的任务。

我所做的是创建一个显示当前用户列表的视图。我这样做了,因为我希望能够在用户忘记密码时更改密码。以下是我认为的一个片段:

<% foreach (MembershipUser user in Model) { %>

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

<% }%>

我想知道的是,是否可以通过动作链接传递用户名,就像我上面所做的那样。我在global.asax.cs文件中注册了以下路由,但我不确定我是否已正确完成:

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

这是我的GET行动:

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

    return View();
}

我已通过代码调试,发现ViewData [“username”] =用户名没有填充,所以它看起来像我没有正确注册路由,或者我根本无法使用动作链接传递用户名,就像我有。

如果有人能指出我正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

您似乎使用了错误的方法签名,我认为您正在使用this one

你想做

Html.ActionLink(user.UserName, "changeUserPassword", 
    new { controller = "StoreManager", username = user.UserName });

或者你可以做到

Html.RouteLink(user.UserName, "AdminPassword", 
    new { username = user.UserName });