6

Utilizzando Visual Studio 2013,4 (Visual Studio 2013 Update 4) Ho creato un regolare ASP.NET MVC progetto 5 con individuale Account utente configurazione di autenticazione. Tutte le funzionalità di registrazione e accesso degli utenti sono state già supportate da Visual Studio e funzionano correttamente.Come verificare se l'utente esiste già sul lato client in ASP.NET MVC 5?

come implementare la validazione lato client della seguente regola nella pagina di registrazione: Non si può già registrato utente con lo stesso e-mail?

risposta

11

È possibile utilizzare RemoteAttribute per eseguire la convalida lato client con un callback del server.

1) Aggiungere il seguente metodo alla 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) Aggiungi Remote attributo Email proprietà di RegisterViewModel classe:

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

dove "Account" è il nome del controller di servire e "UserAlreadyExistsAsync" è il nome dell'azione.

+2

Vale anche la lettura [Procedura: implementare convalida remoto in ASP.NET MVC] (https://msdn.microsoft. it/it/us/library/gg508808% 28VS.98% 29.aspx) –

+0

Questo è esattamente quello che stavo cercando ma non funziona con la libreria twitterbootstrapmvc '@ Html.Bootstrap(). TextBoxFor (t => t. E-mail) .Placeholder ("Indirizzo email"). ShowValidationMessage (true) ' * // come convalida/invoco sul lato client qui con la lib di hellbobootstrapmvc hell * * @ Html.ValidationMessageFor (t => t.Email)' – aggie

+0

Cosa dovrebbe Lo faccio se voglio controllare un nome utente solo su operazione di salvataggio, non su operazione di aggiornamento. – Hemal

0

Questo ha aiutato molto. Nel mio caso era un tavolo, dove erano anche possibili aggiornamenti. In questo caso la soluzione di cui sopra non funziona. Quindi volevo condividere la mia soluzione per questo caso.

Nella soluzione di seguito, ho aggiunto un campo aggiuntivo da passare al controller (la chiave primaria del modello). Quindi nel controller sto verificando se è stata data la chiave primaria. Se è così, sappiamo che siamo venuti dal sito di aggiornamento poiché è l'unico caso in cui abbiamo già un ID nel modello. L'ultimo passaggio consiste nel verificare se la stringa e la chiave primaria sono uguali. Se lo sono entrambi, va bene, perché non abbiamo cambiato nulla nella stringa. Se solo la stringa è la stessa, ma non l'ID, significa che abbiamo cambiato la stringa e l'abbiamo modificata in un'altra stringa di articoli esistente, quindi restituiamo false.

Modello:

[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; } 

Controller:

[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)); 
    } 
} 
Problemi correlati