我正在使用Html.ActionLink
帮助程序为Reset
区域PasswordReset
中控件Admin
中的操作[{1}}创建标记。
对Html.ActionLink的调用是在foreach循环中(简化为html):
foreach(var item in Model.Entities)
{
<p>
@Html.ActionLink("Reset Password",
"Reset",
"PasswordReset",
new {area="Admin",
userName=item.UserName,
email=item.Email,
roles=item.Roles},
null)
</p>
}
[HttpGet]
public virtual ActionResult Reset(string userName, string email, string roles)
{
if (string.IsNullOrEmpty(userName)) throw new ApplicationException("Invalid Username!");
var ue = new UsernameEmailDTO
{
UserName = userName,
Email = email,
Roles = roles
};
return View(ue);
}
context.MapRoute(
"Admin_PasswordReset",
"Admin/Password/Reset/{userName}",
new { controller = "PasswordReset", action="Reset", email = UrlParameter.Optional, roles = UrlParameter.Optional }
);
我可以直接使用路线调用该动作。
但是,我的操作链接只会生成一个指向当前页面的链接。
因此我的Html.ActionLink代码中必须有错误。
但是什么?!
非常令人沮丧,因为我认为我已经超过了这种疼痛障碍。
答案 0 :(得分:0)
帮助程序使用当前路径路径覆盖您的URL。传递routeValues:null作为参数来解决此问题。
foreach(var item in Model.Entities)
{
<p>
@Html.ActionLink("Reset Password", "Reset", "PasswordReset",
new {
userName = item.UserName,
email = item.Email,
roles = item.Roles }
)
</p>
}
编辑:我现在看到了。问题是你的路线配置。您传递了3个参数,但您的路线只有一个。当Html帮助程序创建路径时,它将采用匹配的第一条路径。
的
的context.MapRoute(
"Admin_PasswordReset",
"Admin/Password/Reset/{userName}/{email}/{roles}",
new { controller = "PasswordReset", action="Reset", email = UrlParameter.Optional, roles = UrlParameter.Optional }
);
的