6

Tôi đã bắt đầu một trang web dựa trên asp.net MVC 3 và MySql tôi có tư cách thành viên để làm việc với trình kết nối MySQL .NET . với một dự án mới của mvc 3 i có một mẫu đăng ký làm việc và mẫu đăng nhập làm việcthêm nhiều trường vào biểu mẫu đăng ký sử dụng tư cách thành viên trên MySql và MVC 3

nhưng ... làm cách nào để thêm nhiều trường vào biểu mẫu đăng ký? tôi biết cách thêm chúng mô hình của tôi và trang .. nhưng làm thế nào để tôi làm cho tư cách thành viên giữ cho dữ liệu mới này bị bệnh cho người dùng? tôi có phải tự tạo các cột trong cơ sở dữ liệu không? hoặc thành viên biết cách tạo chúng tự động bằng cách nào đó?

tôi chỉ muốn thêm 3 lĩnh vực cho việc đăng ký ...

nhờ

Trả lời

8

tôi đề nghị bạn solu này sự.

  1. Tạo một bảng gọi là UserDetails
  2. Thêm một lĩnh vực mà trỏ đến UserId

Bạn đã hoàn tất.

Bây giờ bạn cần một số lớp để truy xuất các trường dữ liệu dựa trên số UserId. Bạn cũng có thể triển khai MembershipProvider của riêng mình và thêm phương thức như GetUserDetail() trả về một đối tượng có chứa các trường bổ sung của bạn.

Điều này dựa trên bài viết ASP.NET chính thức: http://www.asp.net/web-forms/tutorials/security/membership/storing-additional-user-information-cs

+0

Nơi để viết mã để chèn các giá trị trong UserDetails trong khi quá trình đăng ký? Bởi vì tôi không thấy bất kỳ mã chèn nào trong Account/Register.aspx.cs –

9

hãy xem tập tin AccountModels.cs của bạn. Nó chứa

public class RegisterModel 
{ 
    // User name, Email Adress, Password, Password confirmation already there 

    // you can add something like below 
    [Required] 
    [Display(Name = "Nickname")] 
    public string Nickname { get; set; } 
} 

Khi bạn có thuộc tính mới trong mô hình, bạn cần cập nhật chế độ xem. Trong Chế độ xem> Tài khoản> Register.cshtml bạn nên thêm

 <div class="editor-label"> 
      @Html.LabelFor(m => m.Nickname) 
     </div> 
     <div class="editor-field"> 
      @Html.PasswordFor(m => m.Nickname) 
      @Html.ValidationMessageFor(m => m.Nickname) 
     </div> 

Khi bạn đã hoàn tất, bạn cần cập nhật logic đăng ký để sử dụng thuộc tính mới của mình. Tới AccountController và tìm

[HttpPost] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      MembershipCreateStatus createStatus; 
      Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus); 

      if (createStatus == MembershipCreateStatus.Success) 
      { 
       FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */); 
       // 
       // this would be a good place for you to put your code to do something with model.Nickname 
       //      
       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       ModelState.AddModelError("", ErrorCodeToString(createStatus)); 
      } 
     } 

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

Nếu bạn muốn kéo dài thông tin đó để người sử dụng ASP.NET hồ sơ, bạn cần điều này trong Web.config

<profile> 
    <providers> 
    <clear /> 
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
    </providers> 
    <properties> 
    <add name="Nickname" defaultValue="False" type="System.String" /> 
    </properties> 
</profile> 

Sau đó, trong mã của bạn - bạn có thể làm

var userProfile = ProfileBase.Create(model.UserName); 

để nhận/đặt tài sản của bạn trong hồ sơ

+0

bạn là người viết: // đây sẽ là một nơi tốt để bạn có thể đặt mã của bạn để làm điều gì đó với model.Nickname nhưng những gì mã mà sẽ là ..? một cuộc gọi khác đến cơ sở dữ liệu? điều này didnt giải quyết câu hỏi của tôi về cách tôi có thể làm cho các thành viên làm điều đó. tôi đọc một cái gì đó về cơ sở hồ sơ. là nó? .. là cách duy nhất 2 cuộc gọi đến cơ sở dữ liệu? –

+0

Điều đó tùy thuộc vào bạn cách bạn muốn xử lý phần kiên trì dữ liệu. Bạn có thể sử dụng Hồ sơ (một số tìm thấy không đủ linh hoạt) hoặc bạn có thể khởi tạo DataContext của mình. Xem câu trả lời được cập nhật – torm

+1

Sau khi thực hiện 'userProfile.SetPropertyValue (" Biệt hiệu "," biệt hiệu của tôi ");' do 'userProfile.Save()' để duy trì. – bennedich

0

Giả sử bạn muốn tạo trường cho Độ tuổi và Giới tính. trước tiên bạn có thể tạo giao diện người dùng để đăng ký trong chế độ xem Đăng ký tương ứng. nó có nghĩa là tạo ra các lĩnh vực đầu vào cho Tuổi và Giới tính. sau đó trong AccountController, hãy vào khung nhìn Register và thêm các trường Age và Gender trong đối tượng ApplicationUser (đã được khai báo). Và ở đó bạn đi.

Thông tin chi tiết về vấn đề này có thể được tìm thấy http://blog.falafel.com/customize-mvc-5-application-users-using-asp-net-identity-2-0/

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