Facebook喜欢asp mvc中的个人资料页面 - 架构问题

时间:2011-11-28 23:48:49

标签: asp.net-mvc asp.net-mvc-3

我网站上的用户拥有自己的个人资料页面。在那里,用户可以设置他们的数据。在编辑按钮上按此页面可编辑。

现在,另一位用户可以浏览其他用户个人资料。

所以我想知道:

  1. 我应该制作两个控制器ProfileController/IndexProfileAsAnotherUserSeeItController/Index。首先使用配置文件所有者来设置数据,而另一个使用其他用户来查看这些数据?
  2. 只有一个控制器ProfileController/Index,并根据一些参数决定显示哪些数据(编辑按钮,删除配置文件页面项按钮等)?

2 个答案:

答案 0 :(得分:2)

就个人而言,我会有一个控制器=> AccountsControllerUsersController。在那里,我会有ActionMethod名为Details,其中列出了特定用户的所有详细信息。

如果我的网站是StackOverflow,则示例路线为:http://stackoverflow.com/users/30674/pure-krome

转换为

{controller}/details/{id}/{optional anything .. which in this case is a name, for SEO}

我还有Edit动作方法

例如 http://stackoverflow.com/users/edit/30674

{controller}/{action}/{id}

现在,Details操作方法中的逻辑将确定要在视图上显示的内容。因此,如果你想要一个编辑按钮,控制器动作方法应该把它弄清楚,如果被告知,视图将只显示它。

例如(pseduo代码)

public ActionResult Details(int userId)
{
    var user = Database.Load<User>(userId);
    if (user == null)
    {
        return HttpNotFound();
    }

    var viewModel = new DetailsViewModel
                    {
                        DisplayName = user.DisplayName,
                        Name = (user.FirstName + " " + user.LastName).Trim()
                    };
    if (LoggedInUser != null && LoggedInUser.HasRole(Roles.CanEditThisUser)
    {
        viewModel.IsEditButtonVisible = true;
    }

    return View(viewModel);
}

,视图很简单..比如

<snip html stuff>
@if (model.IsEditButtonVisible)
{
    // display edit button Html code.
}

// Display user details Html stuff..

注意事项: -

  1. 视图强烈输入自己的ViewModel。
  2. Controller完成所有计算
  3. 查看真的很蠢。

答案 1 :(得分:0)

最有意义的是,有两个操作可以提供个人资料页面的不同视图。是否在两个独立的控制器中实现这些操作并不重要。

如果将所有逻辑放在一个视图中以确定基于视图上下文显示哪些内容,则与两个完全独立的“显示”和“编辑”视图相比,可能会变得更难维护。 / p>