2013-05-19 187 views
0

我正在使用MVC 4,并且试图向名为AddedById的UserProfile(用于管理内容)添加一个新字段。使用SimpleMembershipProvider创建用户帐户

以下是我有:

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new 
       { 
        FirstName = model.FirstName, 
        LastName = model.LastName, 
        AddedDate = DateTime.UtcNow 
        AddedByID = // to sure how to get the id because the account has not been created yet. 
       }); 

应该创建帐户后,我刚更新AddById?

+0

为什么你需要这个时候,你已经有'Userid'和'Userprofile'? – Komengem

+0

@KomengeMwandila由于支持团队可以为某人创建帐户。 –

+0

如果管理员正在创建帐户,那么该用户已登录...因此您拥有该帐户,并且可以在创建新帐户时包含该帐户。 – Jasen

回答

1

由于支持团队可以为某人创建账户

如果该情况下,确保了AddedByIDNullable,然后让他们创造一个User以前Support Team先认证。

然后,让你的Register Action看起来像这样;

// 
    // POST: /Account/Register 

    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      using (EfDb db = new EfDb()) 
      {          
       try 
       { 
        var userProfile = db.UserProfiles.Local.SingleOrDefault(u => u.UserName == User.Identity.Name) 
           ?? db.UserProfiles.SingleOrDefault(u => u.UserName == User.Identity.Name); 

         WebSecurity.CreateUserAndAccount(
          model.UserName, 
          model.Password, 
           new 
            { 
             FirstName = model.FirstName, 
             LastName = model.LastName, 
             AddedDate = DateTime.UtcNow, 
             AddedByID = userProfile.UserId 
            } 
          ); 

       catch (MembershipCreateUserException e) 
       { 
        ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
       } 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 
+0

谢谢。我了解你在这里有什么,但当用户创建自己的帐户时呢?最好使用创建用户的事务并更新AddById字段? –

+0

@hbrock我建议制作'AddedById'' Nullable',这样当账户的所有者是创建账户的时候,'AddedById'是'Null',这应该足以说明谁创建了账户。此外,您避免不必要的旅程返回到数据库。 – Komengem