我已经完成了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”] =用户名没有填充,所以它看起来像我没有正确注册路由,或者我根本无法使用动作链接传递用户名,就像我有。
如果有人能指出我正确的方向,我将不胜感激。
答案 0 :(得分:2)
您似乎使用了错误的方法签名,我认为您正在使用this one
你想做
Html.ActionLink(user.UserName, "changeUserPassword",
new { controller = "StoreManager", username = user.UserName });
或者你可以做到
Html.RouteLink(user.UserName, "AdminPassword",
new { username = user.UserName });