2017-05-11 1 views
0

Je travaille actuellement sur un projet MVC qui nécessite CRUD pour un consultant et un client (2 tables séparées). Au début, nous venons de créer CRUD pour ces utilisateurs et de réaliser maintenant que nous devons ajouter une inscription et à l'identification fonction de cela, est-il possible d'appeler le AccountController intégré avec le contrôleur existant que nous avons généré?comment intégrer AccountController (enregistrement) dans CRUD avec MVC

Ou est-il un moyen d'appeler deux ou plusieurs modèles dans un seul contrôleur ou vue?

Modèle client

public class Client:ApplicationUser 
{ 
    [Key] 
    [Required] 
    public int Id { get; set; } 
    [Required] 
    [Display(Name = "Client Name")] 
    public string ClientName { get; set; } 

    [Required] 
    [Display(Name = "Client Address")] 
    public string ClientAddress { get; set; } 
    [Required] 
    [Display(Name = "Contact Number")] 
    public long ContactNumber { get; set; } 
    [Required] 
    [EmailAddress] 
    [Display(Name = "Email")] 
    public string Email { get; set; } 

    [Required] 
    [Display(Name = "Project Leader")] 
    public string ProjectLeader { get; set; } 

    public virtual ManageTravel ManageTravel { get; set; } 


    [Display(Name = "Rate")] 

    public double Rate { get; set; } 


    [Display(Name = "Distance")] 

    public string Distance { get; set; } 


    [Display(Name = "Rate")] 
    [Required] 
    public string TravelCode { get; set; } 

Consultant modèle

public class Consultant:ApplicationUser 
{ 
    [Key] 
    public int ConsultantNum { get; set; } 
    [Required] 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 
    [Required] 
    [Display(Name = "Last Name")] 
    public string LastName { get; set; } 
    [Required] 
    [Display(Name = "Contact Number")] 
    public int ContactNumber { get; set; } 
    [Required] 
    [Display(Name = "Consultant Address")] 
    public string ConsultantAddress { get; set; } 
    [Required] 
    [Display(Name = "Email")] 
    [EmailAddress] 
    public string Email { get; set; } 
    [Required] 
    [Display(Name = "Consultant Type")] 
    public string ConsultantType { get; set; } 
    [Required] 
    [Display(Name = "Commission Code")] 
    public string ComissionCode { get; set; } 
    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 
    [Required] 
    [Display(Name = "Role Type")] 
    public string RoleType { get; set; } 
} 

AccountController

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Register(RegisterViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
      var result = await UserManager.CreateAsync(user, model.Password); 
      if (result.Succeeded) 
      { 
       // This code has been added to the action for email confirmation 
       var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 
       var callbackUrl = Url.Action(
        "ConfirmEmail", 
        "Account", 
        new { userId = user.Id, code = code }, 
        protocol: Request.Url.Scheme); 

       await UserManager.SendEmailAsync(
        user.Id, 
        "Confirm your account", 
        "Please confirm your account by clicking this link: <a href=\"" 
        + callbackUrl + "\">link</a>"); 

       ViewBag.Link = callbackUrl; 
       return View("DisplayEmail"); // DisplayEmail View has been created 
      } 
      AddErrors(result); 

      //end of email confirmation code 
     } 

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

Répondre

0

Oui vous pouvez ajouter ces fonctionnalités pour vos modèles existants

  1. Vos modèles devraient inherite de ApplicationUser classe, qui Cosider comme Table per Type (TPT)
  2. alors vous devez personnaliser l'authentification (login, enregistrer) les actions AccountController

Voici acomplete exemple:

Modèle Consultant :

[Table("Consultant")] 
    public class Consultant: ApplicationUser 
    { 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public string Password{ get; set; } 
    } 

Modèle client:

[Table("Client")] 
     public class Client: ApplicationUser 
     { 
      public string Name { get; set; } 
      public string Address { get; set; } 
      public string Password{ get; set; } 
     } 

Dans le registre action Dans AccountController

var user = new Consultant { .... }; 
var result = await UserManager.CreateAsync(user,model.Password); 

Pour plus de détails, vous pouvez voir ce Answer.

i Une simple démo Créé pour vous ici Simple Demo

+0

Nous vous remercions de la solution, j'ai quelques questions, en espérant que vous pouvez aider. –

+0

Merci pour la solution, j'ai quelques questions, en espérant que vous pouvez aider.Dans le JoinViewModel, est-ce que je remplis les champs qui sont identiques dans mes modèles clietn et consultant? Comment afficher ce processus de registre dans une vue? –

+0

Ok, je vais vous aider à modifier la démo et je vais le commenter ici, mais si je comprends votre point de vue, vous posez des questions sur le registre voir ce que ce serait! et s'il vous plaît si la réponse était utile marquez-le comme une réponse @ShriyaBramdeo – AlameerAshraf

0

oui vous ca n ajouter des fonctions (actions) requis pour la connexion/enregistrer/ajouter des rôles, etc. à votre contrôleur, vous pouvez les copier à partir du contrôleur de compte proviennent asp projet de modèle mvc ou les ajouter manuellement après l'installation de l'identité asp à votre projet vous pouvez vérifier ces tutoriels http://httpjunkie.com/2013/311/adding-mvc-5-identity-to-an-existing-project/ https://code.tutsplus.com/courses/authentication-with-aspnet-identity/lessons/installing-identity-from-scratch

et vérifiez ce commentaire ici https://stackoverflow.com/a/31963828/7621536