2017-05-11 3 views
0

zu integrieren Ich arbeite derzeit an einem MVC-Projekt, das CRUD für einen Berater und einen Client (2 separate Tabellen) benötigt. Zu Beginn haben wir CRUD für diese Benutzer erstellt und stellen nun fest, dass wir eine Registrierungs- und Anmeldefunktion hinzufügen müssen. Gibt es eine Möglichkeit, den integrierten AccountController mit dem vorhandenen Controller aufzurufen, den wir generiert haben?wie AccountController (Registrierung) in CRUD mit MVC

Oder gibt es eine Möglichkeit, zwei oder mehr Modelle in einer einzigen Steuerung oder Ansicht aufzurufen?

Client-Modell

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 Modell

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

Account

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

Antwort

0

Ja Sie diese Funktionen für Ihre bestehenden Modelle hinzufügen können

  1. Ihre Modelle sollten von ApplicationUser Klasse Inherite, die COSIDER als Table per Type (TPT)
  2. dann sollten Sie die Authentifizierung (Login, Register) Aktionen in Account

Hier gestalten ist acomplete Beispiel:

Modell Consultant :

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

Modell Auftraggeber:

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

Im Register Aktion In Account

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

für mehr Details, können Sie dieses Answer sehen.

habe ich eine einfache Demo für Sie hier Simple Demo

+0

Sie für die Lösung Danke, ich habe ein paar Anfragen, Ihnen helfen können hoffen. –

+0

Vielen Dank für die Lösung, ich habe ein paar Fragen und hoffe, Sie können helfen.Füllen Sie im JoinViewModel Felder aus, die sowohl in meinem Client- als auch in meinem Beratermodell identisch sind? Wie würde ich diesen Registrierungsprozess in einer Ansicht anzeigen? –

+0

Ok, ich werde dir helfen, die Demo zu modifizieren und ich werde sie hier kommentieren, aber wenn ich deinen Punkt verstehe, fragst du nach der Registrierungsansicht, was es wäre! und bitte, wenn die Antwort war nützlich, markieren Sie es als Antwort @ShriyaBramdeo – AlameerAshraf

0

ja Sie ca n hinzufügen Funktionen (Aktionen) zum Anmelden/Registrieren/Hinzufügen von Rollen usw. zu Ihrem Controller Sie können sie von Konto Controller aus asp mvc Vorlage Projekt kopieren oder fügen Sie sie manuell nach der Installation asp Identität zu Ihrem Projekt Sie können diese Tutorials überprüfen 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

und diesen Kommentar Überprüfen Sie hier https://stackoverflow.com/a/31963828/7621536

Verwandte Themen