2014-09-13 53 views
0

我有一个表单,用户可以在其中创建新员工。我想将userid存储在提交表单的数据库中。使用在MVC中提交表单的用户标识更新数据库

这是我创建新条目控制器:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(Employee employee) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Employee.Add(employee); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(employee); 
    } 

我有两个表。一个用于员工,另一个用于用户。正如你可以看到我在我的员工表中有用户ID,我想存储提交表单的用户ID。我能够将表单值保存在我的员工表中,但无法获取用户ID。任何想法?

public class UsersContext : DbContext 
{ 
    public UsersContext() 
     : base("DefaultConnection") 
    { 
    } 

    public DbSet<UserProfile> UserProfiles { get; set; } 
    public DbSet<Employee> Employee { get; set; } 
} 

    [Table("UserProfile")] 
    public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
} 

[Table("Employee")] 
public class Employee 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int EmployeeID { get; set; } 
    public string EmployeeName { get; set; } 
    public int DepartmentID { get; set; } 
    public string Department { get; set; } 
    public int UserId { get; set; } 
} 

,这是我的登录表单:

<section id="loginForm"> 
    <h2>Use a local account to log in.</h2> 
    @using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) { 
@Html.AntiForgeryToken() 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>Log in Form</legend> 
    <ol> 
     <li> 
      @Html.LabelFor(m => m.UserName) 
      @Html.TextBoxFor(m => m.UserName) 
      @Html.ValidationMessageFor(m => m.UserName) 
     </li> 
     <li> 
      @Html.LabelFor(m => m.Password) 
      @Html.PasswordFor(m => m.Password) 
      @Html.ValidationMessageFor(m => m.Password) 
     </li> 
     <li> 
      @Html.CheckBoxFor(m => m.RememberMe) 
      @Html.LabelFor(m => m.RememberMe, new { @class = "checkbox" }) 
     </li> 
    </ol> 
    <input type="submit" value="Log in" /> 
</fieldset> 
    } 
    </section> 
+2

那么,在你的窗体中是否存在像'这样的字段? – 2014-09-13 10:23:13

+0

@asdf_enel_hak不。用户已登录。因此,我想要获取存储在UserProfile表中的用户标识。 – sensahin 2014-09-13 10:25:31

回答

1

你应该试试下面这个。 我想你错过了几件你现在可以与自己的逻辑进行比较的东西。

using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Data.Entity; 
using System.Linq; 
using System.Web; 

class Program 
{ 

    private static void Main(string[] args) 
    { 
     UsersContext context = new UsersContext(); 



     string currentUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 
     if (string.IsNullOrWhiteSpace(currentUserName)) 
     { 
      currentUserName = HttpContext.Current.User.Identity.Name; 
     } 
     var currentUser = (from u in context.UserProfiles 
          where u.UserName.Equals(currentUserName) 
          select u).FirstOrDefault(); 

     if (currentUser != null) 
     { 
      context.Employee.Add(new Employee() { EmployeeName = "Mr. Codebased", UserID = currentUser.UserId }); 
      context.SaveChanges(); 

      var userProfile = context.Employee.Include("User").FirstOrDefault().User; 
     } 

    } 

    public class UsersContext : DbContext 
    { 
     public UsersContext() 
      : base() 
     { 
     } 

     public DbSet<UserProfile> UserProfiles { get; set; } 
     public DbSet<Employee> Employee { get; set; } 
    } 

    [Table("UserProfile")] 
    public class UserProfile 
    { 
     [Key] 
     [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
     public int UserId { get; set; } 
     public string UserName { get; set; } 
    } 

    [Table("Employee")] 
    public class Employee 
    { 
     [Key] 
     [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
     public int EmployeeID { get; set; } 
     public string EmployeeName { get; set; } 

     public int UserID { get; set; } 
     public UserProfile User { get; set; } 
    } 

} 
+0

其实,我已经有了userid,因为只有注册和登录用户才能提交表单。所以我已经在UserProfile中使用了userid。但是我不知道如何从那里得到这个用户标识,并在用户提交表单时将其存储到Employee表中。 – sensahin 2014-09-13 10:38:12

+1

您使用哪种身份验证 - 表单? – codebased 2014-09-13 10:43:26

+1

查看我的上述更新 – codebased 2014-09-13 10:44:51

相关问题