单个SignIn表单中的多个signUp表单

时间:2018-03-18 20:58:21

标签: c# asp.net-core

您好我们正在使用ASP.Net Core 2.0构建Web应用程序。我真的堆栈尝试了几个解决方案,但未能实现我的目标。问题是,在注册部分,我碰巧有多个SignUp表单(根据注册到应用程序的用户,其中12个具有不同的属性)。

问题在于解决配置所有这些表单的问题并将用户保存到数据库。还要配置一个验证(UserName,Password,Bool记住我)的单个登录部分,并处理来自任何注册用户的logIn输入,无论他们注册的表格如何。

到目前为止,我们已经能够提出:

       Register.cshtml.cs
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using FarmMart.Data;
using FarmMart.Services;
using FarmMart.Models.RegisterForms;
using Microsoft.AspNetCore.Authorization;

public class RegisterModel : PageModel
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly ILogger<LoginModel> _logger;
    private readonly IEmailSender _emailSender;

    public RegisterModel(
        UserManager<ApplicationUser> userManager,
        SignInManager<ApplicationUser> signInManager,
        ILogger<LoginModel> logger,
        IEmailSender emailSender)
    {
        _userManager = userManager;
        _signInManager = signInManager;
        _logger = logger;
        _emailSender = emailSender;
    }

[BindProperty]

Public RegisterFormsModel Register { get; set; }

我在Models文件夹中创建了一个RegisterForms文件夹,其中包含所有类(11个Departments Classes和1个Lecturer Class),其中每个类表单都有唯一的属性(用户名,密码,Emali课程等)。

 Public class RegisterFormsModel
 {
        internal static string Password = null;
        internal string UserName = null;
        internal string Email = null;

        public Lecturer Lecturer { get; set; }
        public Department1 Department1 { get; set; }
        public Department2 Department2 { get; set; }
        public Department3 Department3 { get; set; }
        public Department4 Department4 { get; set; }
        public Department5 Department5 { get; set; }
        public Department6 Department6 { get; set; }
        public Department7 Department7 { get; set; }
        public Department8 Department8 { get; set; }
        public Department9 Department9 { get; set; }
        public Department10 Department10 { get; set; }
        public Department11 Department11 { get; set;
}

    public void OnGet(string returnUrl = null)
    {
        ReturnUrl = returnUrl;
    }


    public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        ReturnUrl = returnUrl;
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser
            {
                UserName = Register.UserName, Email = Register.Email,
            };
            var result = await _userManager.CreateAsync(user, RegisterFormsModel.Password);
            if (result.Succeeded)
            {
                _logger.LogInformation("User created a new account with password.");

                var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme);
                await _emailSender.SendEmailConfirmationAsync(Register.Email, callbackUrl);

                await _signInManager.SignInAsync(user, isPersistent: false);
                return LocalRedirect(Url.GetLocalUrl(returnUrl));
            }
            foreach (var error in result.Errors)
            {
                ModelState.AddModelError(string.Empty, error.Description);
            }
        }

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

请有任何想法或最佳实践建议如何去做,我会非常感激。谢谢你

0 个答案:

没有答案