如何使用@ Html.ActionLink将电子邮件ID作为参数传递给action方法?

时间:2013-12-30 07:48:10

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

Index.chtml页面本身我有这个链接

@Html.ActionLink("Edit","EditUserProfile",new {vchUserID = item.vchUserID})

内部用户控制器本身

// GET: /User/ViewUserProfile/1
public ActionResult EditUserProfile(string userID = "abdul@kareems.com")
{
    LIVE_USER objUserFind = db.LIVE_USER.Find(userID);

    if (objUserFind == null)
    {
        return HttpNotFound();
    }

    return View(objUserFind);

}

//
//POST: /Admin/EditAdminProfile/1
[HttpPost]
public ActionResult EditUserProfile(LIVE_USER objUserFind)
{
    if (ModelState.IsValid)
    {
        db.Entry(objUserFind).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(objUserFind);
}

RouteConfig.cs文件本身我有像bellow 这样的url结构。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{vchUserID}",
            defaults: new { controller = "Admin", action = "Index", vchUserID = UrlParameter.Optional /*kareem removed vchUserID = UrlParameter.Optional*/         }
        );

我得到的结果是: * HTTP错误404.0 - 未找到 您要查找的资源已被删除,名称已更改或暂时不可用。 *

1 个答案:

答案 0 :(得分:3)

控制器方法中参数的名称需要与路径中定义的参数名称相匹配。目前,该参数在路径中名为vchUserID,但在您的控制器方法中,您将其命名为userId

这意味着控制器方法永远不会从Url获​​取值,并且您将始终获得默认值“abdul@hibrise.com”。 (我想这不是你的一个在线用户,所以你要返回HttpNotFound结果)

尝试在控制器方法中重命名参数,如下所示:

public ActionResult EditUserProfile(string vchUserID = "abdul@hibrise.com")
{
    ...
}