2011-10-21 35 views
5

Tôi đang sử dụng API thành viên với việc triển khai OpenId trong dự án của tôi được xây dựng trên khung MVC2. Khác với tên người dùng, tôi cần một số trường khác được liên kết với người dùng tại thời điểm đăng ký.Lưu trữ dữ liệu bổ sung trong bảng aspnet_profile với dữ liệu Tư cách thành viên

Tôi không chắc chắn nhưng tôi nghĩ rằng Hệ thống hồ sơ trong asp.net được xây dựng cho loại yêu cầu này. Ngoài ra, tôi thấy một bảng với các bảng thành viên khác có tên 'aspnet_profile'.

tôi đã thêm cài đặt sau trong web.config ứng dụng để cho phép hồ sơ cá nhân:

<profile enabled="true"> 
     <properties> 
     <add name="FullName" allowAnonymous="false"/> 

     </properties> 

    </profile> 

Như đã nói trước đây, ứng dụng cần một số dữ liệu bổ sung có liên quan đến người sử dụng, vì vậy khi tạo một người dùng sử dụng Membership API , Tôi đã thêm vài dòng mã khác để nhập vào bảng hồ sơ

System.Web.Security.MembershipCreateStatus status = MembershipService.CreateUser(userModel.UserName, userModel.Password, userModel.UserName); 

        if (status == System.Web.Security.MembershipCreateStatus.Success) 
        { 
         FormsService.SignIn(userModel.UserName, true); 
         Session["Username"] = userModel.UserName; 

         dynamic profile = ProfileBase.Create(MembershipService.GetUser(userModel.UserName).UserName); 
         profile.FullName = userModel.UserFullName; 
         profile.Save(); 

         RedirectToAction("Tech", "Home"); 



        } 

Nhưng tôi không thấy bất kỳ dòng nào được thêm vào bảng aspnet_profile trong cơ sở dữ liệu. Ngoài ra, tôi muốn hỏi nếu điều này là cách ưa thích của việc thêm dữ liệu bổ sung cùng với dữ liệu thành viên mặc định

Trả lời

4

tôi đã làm cho nó hoạt động bằng cách làm cho một số thay đổi liên quan đến mặc định tên nhà cung cấp hồ sơ trong web.config:

<profile enabled="true" defaultProvider="AspNetSqlProfileProvider"> 
     <providers> 
     <clear/> 
     <add name="AspNetSqlProfileProvider" applicationName="/" connectionStringName="ApplicationServices" type="System.Web.Profile.SqlProfileProvider" /> 
     </providers> 

     <properties> 
     <add name="FullName" allowAnonymous="false"/> 

     </properties> 

    </profile> 

Ngoài ra tôi thêm một dòng hơn giữa cuộc gọi đến chức năng ProfileBase.Create và thiết lập Profile.FullName ;

profile.Initialize(userModel.userName, true); 

cuối cùng tôi nhìn thấy một mục trong bảng aspnet_profile cho người sử dụng đăng ký mới :)

+0

Hữu ích và cảm ơn bạn rất nhiều! –

1

1, bạn cần phải tạo ra một lớp hồ sơ để xác định hồ sơ cá nhân cấu trúc

2, bạn cần phải cấu hình của bạn cài đặt cấu hình trong web.config như

3, bây giờ bạn có thể sử dụng mã của bạn bây giờ.

bạn chỉ cần thực hiện 2 bước đầu tiên trước khi sử dụng.

ref: http://weblogs.asp.net/jgalloway/archive/2008/01/19/writing-a-custom-asp-net-profile-class.aspx

+0

Tôi không muốn tạo ra một lớp hồ sơ riêng biệt cho việc này. Tôi nghĩ rằng tôi đang thiếu một thiết lập trong web.config.Tôi không nghĩ rằng nó cần thiết để tạo ra một lớp hồ sơ để làm cho công việc này –

1

Trong khi sử dụng nhà cung cấp hồ sơ ASP.NET, profile properties là cách để tùy chỉnh user profile. Tuy nhiên, bạn không phải tự tạo và lưu cá thể hồ sơ - nó được thực hiện bởi ASp.NET runtime it-self. Sử dụng HttpContext.Current.Profile hoặc sử dụng thuộc tính động Profile động mạnh mẽ từ trang tự nó. Bằng cách sử dụng sau này, bạn có thể viết mã như

Profile.UserName = "User Name"; 

Không cần gọi phương thức Save. Để biết thêm thông tin, hãy xem this article. Trong một ứng dụng web, người ta không thể tham khảo lớp hồ sơ được tạo động, vì vậy bạn phải làm việc với HttpContext.Current.Profile (bạn có thể gán nó cho biến số dynamic để có thể đọc được nhiều mã hơn do bạn thực hiện). Một cách khác là viết your own class.

+0

MVC không cung cấp cho bạn HttpContext.Current, bạn có thể trực tiếp truy cập vào lớp hồ sơ bằng cách sử dụng HttpContext.Profile –

+0

@Kunal, 'HttpContext.Profile' là một tài sản cá thể, vì vậy bạn cần một thể hiện của HttpContext thường có sẵn thông qua 'HttpContext.Current' trong bất kỳ ứng dụng ASP.NET nào (kể cả ASP.NET MVC)! – VinayC

+0

@VinayC Anh ta có nghĩa là trong lớp MVC 'Controller' hoặc' View', có một thuộc tính 'HttpContext', về cơ bản là một trình bao bọc cho' HttpContext.Current'. –

Các vấn đề liên quan