@ Html.ActionLink助手指向当前页面

时间:2013-04-11 17:32:03

标签: asp.net-mvc asp.net-mvc-4 html.actionlink

设定:

我正在使用Html.ActionLink帮助程序为Reset区域PasswordReset中控件Admin中的操作[{1}}创建标记。

Html.ActionLink调用(已编辑,但仍无欢乐):

对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代码中必须有错误。

但是什么?!

非常令人沮丧,因为我认为我已经超过了这种疼痛障碍。

1 个答案:

答案 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 }
    );

在此处找到:Html ActionLink Route problem