会话状态MVC3

时间:2012-01-31 20:25:58

标签: c# asp.net asp.net-mvc-3 razor

我遇到了问题我无法找到教程或某些代码,我可以在其中执行某些会话状态。例如,我想创建一个应用程序,当用户登录时,他或她只能查看信息,例如查看其成绩的学生,其他学生无法看到该信息。我去年在VB 2008中实现了这一点,但在MVC3中需要帮助,因为它与我使用C#的语言不一样。在vb 2008中,我实现了连接ASP.net数据库(用户)的表,并通过外键加入我的员工表。并添加了以下代码:

  Session("ID") = objUser
    Dim db As New DataClassesDataContext
    Dim info = From a In db.tblCourses _
               Where a.CourseTitle = ddlCourseName.SelectedItem.Value _
               Select a.CourseId Order By CourseId Descending
    crseID = info.FirstOrDefault()

    Session("Course") = crseID
    sdsAddStudent.Insert()

    FName.Text = ""
    LName.Text = ""
    Address.Text = ""
    ddlCourseName.SelectedIndex = 0
    Session("UserID2") = objUser
    Session("RoleID2") = "f13b9bf3-593d-4170-bfaa-bc43655773e2"
    sdsRoleStudent.Insert()

我知道VB与C#MVC3不同,因为这是2008年而不是MVC3只是显示这段代码所以人们知道我不是在免费代码之后并试图做出一些没有成功的努力。

感谢您的帮助人

1 个答案:

答案 0 :(得分:1)

我不清楚你到底想要达到的目标。

如果要限制用户专门访问属于他们的数据,则需要在“用户”表中将此数据与其ID相关联。关于表格结构的说法很少,但我认为可以安全地假设您有Courses表和类似于将许多用户映射到单个课程的UsersInCourses。您所要做的就是选择分配了用户ID的课程。要获取当前登录的用户,您只需参考

User.Identity.Name

在您的应用程序代码中。

所以让我们假设你的班级正在烹饪reciepe:

public class Recipe
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Author { get; set; }
    public string PreparationInstructions { get; set; }
    public DateTime CreationDate { get; set; }
}

并且您希望有一个Action,它返回当前登录用户的配方

    public ActionResult ShowMyRecipes()
    {
        var myRecipes = dbContext.Recipes.Where(recipe => recipe.Author.Equals(User.Identity.Name)).ToList();
        return View(myRecipes);
    }


    public ActionResult CreateRecipe(Recipe recipe)
    {
        // set Author to curently logged in user's key
        recipe.Author = Membership.GetUser().ProviderUserKey;
        // save changes
        dbContext.Recipes.Add(recipe);
    }