ActionLink中的用户ID

时间:2015-11-24 15:18:59

标签: asp.net-mvc visual-studio-2013 actionlink

我正在开发一个应用程序,在用户登录后我想将它们重定向到可以更新其个人资料的页面,为此我想使用登录的用户的ID来检索他们的细节。

由于我试图像这样使用他们的ID,我不知道最好的方法是在网址中显示ID还是 actionLink ,我的编辑ActionResult是:

// GET: ProfileFormViewModel/Edit/5
    public ActionResult Edit(int id)
    {
        //My code to load the user details

        return View(profileFormViewModel);
    }

这是否意味着如果用户更改了网址,他们会获得其他用户的详细信息?

由于我试图从登录用户中检索用户ID,我甚至需要在ActionResult方法中接收int参数,我可以将其保留为:

// GET: ProfileFormViewModel/Edit/5
    public ActionResult Edit()
    {
        //get logged in user

        return View(profileFormViewModel);
    }
    public ActionResult Edit(ProfileFormViewModel profileFormViewModel)
    {
        try
        {
            if (ModelState.IsValid) 
            {
                 //Go save it
            }


            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

我的路线配置如下,所以如果我不在ActionResult链接中发送一个int ID,它会给我一个错误

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

1 个答案:

答案 0 :(得分:0)

  

这是否意味着如果用户更改了网址,他们就会获得   其他用户的详细信息?

答案是。如果您不希望发生这种情况,可以这样做:

  1. 使用当前登录的用户id检查输入id
  2. 如果匹配,请告诉他Profile并让他按照自己的意愿进行任何更改。
  3. 如果它们不匹配,则表示他正在尝试查看其他个人资料。您可以返回错误代码,或者只是将其重定向到另一个页面。
  4. 但是,从我的观点来看,当用户尝试通过更改网址中的id来查看其他用户的个人资料时,只需让他查看即可。他所能做的就是阅读,不允许编辑

      

    我甚至需要在ActionResult方法中接收int参数吗?

    ,你应该。但要明确的是,正如我所说:“让他看到其他个人资料”,你应该将其分为两种方法:

    public ActionResult ViewProfile(int id)
    {
        // This method allows user to view his or another user's profile
    }
    
    public ActionResult Edit()
    {
        // This method is called when user clicks Edit in his profile.
        // It returns a View for editing (data in some controls like textboxes, dropdownlist,...)
    }