6

Sử dụng Visual Studio 2013,4 (Visual Studio 2013 Update 4) Tôi đã tạo ra một dự án thường xuyên ASP.NET MVC 5 với Individual User Accounts cấu hình xác thực. Tất cả các tính năng đăng nhập và đăng nhập của người dùng đã được Visual Studio tạo cho tôi và hoạt động tốt.Cách kiểm tra xem người dùng đã tồn tại ở phía máy khách trong ASP.NET MVC 5 chưa?

Cách triển khai xác thực phía máy khách của quy tắc sau trên trang đăng ký: Không có người dùng đã đăng ký với cùng một email?

Trả lời

11

Bạn có thể sử dụng RemoteAttribute để thực hiện xác thực phía máy khách với gọi lại máy chủ.

1) Thêm phương pháp sau đây để các AccountController:

[AllowAnonymous] 
public async Task<JsonResult> UserAlreadyExistsAsync(string email) 
{ 
    var result = 
     await userManager.FindByNameAsync(email) ?? 
     await userManager.FindByEmailAsync(email); 
    return Json(result == null, JsonRequestBehavior.AllowGet); 
} 

2) Thêm Remote thuộc tính để Email tài sản của RegisterViewModel lớp:

[Remote("UserAlreadyExistsAsync", "Account", ErrorMessage = "User with this Email already exists")] 
public string Email { get; set; } 

nơi "Account" là tên của bộ điều khiển phục vụ và "UserAlreadyExistsAsync" là tên hành động.

+2

Worth cũng đọc [Làm thế nào để: Thực hiện Validation từ xa trong ASP.NET MVC] (https://msdn.microsoft. com/en-us/library/gg508808% 28VS.98% 29.aspx) –

+0

Đây chính xác là những gì tôi đang tìm kiếm nhưng nó không hoạt động với thư viện twitterbootstrapmvc '@ Html.Bootstrap(). TextBoxFor (t => t. Email) .Placeholder ("Địa chỉ Email"). ShowValidationMessage (true) ' * // làm cách nào để xác thực/gọi ở phía máy khách ở đây với lib địa chỉ twitterbootstrapmvc *' @ Html.ValidationMessageFor (t => t.Email) ' – aggie

+0

Điều gì nên Tôi làm gì nếu tôi chỉ muốn kiểm tra tên người dùng trên thao tác Lưu, không phải trên thao tác cập nhật. – Hemal

0

Điều này đã giúp rất nhiều. Trong trường hợp của tôi, đó là một bảng, nơi cập nhật cũng có thể. Trong trường hợp này, giải pháp trên không hoạt động. Vì vậy, tôi muốn chia sẻ giải pháp của tôi cho trường hợp này.

Trong giải pháp bên dưới, tôi đã thêm một trường bổ sung để chuyển tới Bộ điều khiển (Khóa chính của Mô hình). Sau đó, trong bộ điều khiển tôi đang kiểm tra nếu khóa chính được đưa ra. Nếu có, chúng tôi biết rằng chúng tôi đến từ trang web cập nhật vì đó là trường hợp duy nhất chúng tôi đã có ID trong mô hình. Bước cuối cùng là kiểm tra xem chuỗi và khóa chính có giống nhau hay không. Nếu cả hai đều ổn, bởi vì chúng tôi không thay đổi gì trong chuỗi. Nếu chỉ có chuỗi giống nhau nhưng không phải là ID, có nghĩa là, chúng ta đã thay đổi chuỗi và thay đổi nó thành một chuỗi các mục hiện có khác, vì vậy chúng ta trả về false.

mẫu:

[Key] 
    [Display(Name = "Idee ID")] 
    public int intIdeaID { get; set; } 

    [Required(ErrorMessage = "Dieses Feld muss ausgefüllt werden")] 
    [Display(Name = "Idee")] 
    [Remote("ideaExists", "TabIdea", HttpMethod = "POST", ErrorMessage = "Es wurde bereits eine Idee mit dieser Bezeichnung erstellt", AdditionalFields = "intIdeaID")] 
    public string strIdea { get; set; } 

Bộ điều khiển:

[HttpPost] 
public JsonResult ideaExists(string strIdea, int? intIdeaID) 
{ 
    if (intIdeaID != null) 
    { 
     if (db.tabIdea.Any(x => x.strIdea == strIdea)) 
     { 
      tabIdea existingTabIdea = db.tabIdea.Single(x => x.strIdea == strIdea); 
      if (existingTabIdea.intIdeaID != intIdeaID) 
      { 
       return Json(false); 
      } 
      else 
      { 
       return Json(true); 
      } 
     } 
     else 
     { 
      return Json(true); 
     } 
    } 
    else 
    { 
     return Json(!db.tabIdea.Any(x => x.strIdea == strIdea)); 
    } 
} 
Các vấn đề liên quan