环境:vs2017,.core net 2.1,带有MVC的默认.core项目
我尝试在SQL DB中添加NickName
列存储,我已经更新了DB,并且还在输入模型中添加了NickName
列。它成功在注册页面上显示输入的NickName选项,但是在单击注册后无法写入SQL DB(以及照常进行其他工作)。
在重写IdentityUser之后,它不起作用。
Register.cshtml.cs中的添加/更改代码:
public class CustomUserproperties : IdentityUser
{
public string NickName { get; set; }
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
//here is where i change.
var user = new CustomUserproperties { UserName = Input.UserName, Email = Input.Email, NickName = Input.NickName };
var result = await _userManager.CreateAsync(user, Input.Password);
我还能做什么?
这里是一个有效的演示,您可以参考创建一个新的演示或检查您旧的演示之间的差异。
1。修改ApplicationDbContext和Add-migration,更新数据库
public class ApplicationDbContext : IdentityDbContext<CustomUserproperties>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
2。用上面的ApplicationDbContext来支持身份,那么您可以像下面这样获得RegisterModel:
public class RegisterModel : PageModel
{
private readonly SignInManager<CustomUserproperties> _signInManager;
private readonly UserManager<CustomUserproperties> _userManager;
private readonly ILogger<RegisterModel> _logger;
private readonly IEmailSender _emailSender;
public RegisterModel(
UserManager<CustomUserproperties> userManager,
SignInManager<CustomUserproperties> signInManager,
ILogger<RegisterModel> logger,
IEmailSender emailSender)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
_emailSender = emailSender;
}
[BindProperty]
public InputModel Input { get; set; }
public string ReturnUrl { get; set; }
public class InputModel
{
[Required]
[Display(Name = "NickName")]
public string NickName { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
public void OnGet(string returnUrl = null)
{
ReturnUrl = returnUrl;
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
var user = new CustomUserproperties { UserName = Input.Email, Email = Input.Email , NickName = Input.NickName };
var result = await _userManager.CreateAsync(user, Input.Password);
...
}
}
}
3。在StartUp.cs中更改ConfigureServices
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<CustomUserproperties>()
.AddEntityFrameworkStores<ApplicationDbContext>();
4._LoginPartial.cshtml
@inject SignInManager<CustomUserproperties> SignInManager
@inject UserManager<CustomUserproperties> UserManager
这是我的project。