2013-05-19 222 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