我正在为一所学校开发一个ASP.NET项目。在一个领域,我希望能够为员工和学生提供几乎相同的视图 - 唯一真正的区别是显示的数据。
对于具有学生角色的用户,他们应该只看到他们自己的数据,而教师应该能够看到他们班级的综合数据(加上潜入看单个学生的数据)。两个用户都可以在几个部分视图之间切换,这些视图以不同的方式表示数据(线图,表格等)
使用MVC模式构建此结构的最佳做法是什么? 基本上它对所有这些都是相同的视图,只有我提取的信息会有所不同。我在这里读到了一些关于两个控制器和一个视图的其他问题,但它们似乎没有我相同的权限要求。
答案 0 :(得分:2)
看起来SO已经asp.net mvc - dynamic controller based on authenticated user有一个非常好的答案。这基本上允许您基于身份验证创建不同的控制器。通过将数据的可视化表示分成存储在共享目录中的不同部分视图,可以使这更容易,这样不同控制器的视图就可以使用相同的部分视图来提供html。
答案 1 :(得分:1)
如果我核心理解您的问题,您希望使用一个视图,但发送不同的数据。 我不确定这是否是最佳解决方案。在你的情况下,我会创建两个不同的控制器,一个用于学生,一个用于教师,但如果你想使用你提出的建议,我将使用微软的会员提供商。这是一个例子。 这是一个教程和一些示例
http://theintegrity.co.uk/2010/11/asp-net-mvc-2-custom-membership-provider-tutorial-part-1/
public ActionResult Index()
{
if (User.Identity.IsAuthenticated)
{
MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
if (currentUser != null && currentUser.ProviderUserKey != null && currentUser.IsApproved)
{
var currentUserId = (Guid)currentUser.ProviderUserKey;
// get user data maybe somethink like that ....
Usser result = (from userdata in b.users
where userdata.Id == currentUserId
select userdata).FirstOrDefault();
return View(result);
}
}
return View();
}