您好我们正在使用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();
}
请有任何想法或最佳实践建议如何去做,我会非常感激。谢谢你