Я хотел бы добавить свой собственный обязательный столбец в aspNetUser и адаптировать контроллер идентичности, чтобы он соответствовал ему, поэтому я сначала добавил столбец int с FK таблицы biblio, чем сделал адаптацию в viewModel и методе register
вот что я сделал, чтобы попробовать
в методе post столбец mybiblio для if (ModelState.IsValid) моей модели недопустим, и я получаю эту ошибку Ошибка преобразования параметра из типа 'System.String' в тип '', поскольку преобразователь типов не может конвертировать между этими типами.
[AllowAnonymous]
public ActionResult Register()
{
ServiceReferenceBiblio.ServiceBiblioClient cls = new ServiceReferenceBiblio.ServiceBiblioClient();
ViewBag.mybiblio =GetSelectListItems(cls.GetAll());
return View();
}
вот мой метод POST контроллера регистров
public async Task<ActionResult> Register(RegisterViewModel mymodel, FormCollection form)
{
string selectedId = form["mybiblio"];
string id = selectedId.Substring(0,1);
int res;
bool myidInteg = Int32.TryParse(id,out res);
ServiceBiblioClient cls = new ServiceBiblioClient();
foreach (var item in cls.GetAll())
{
if (item.id == res) {
mymodel.mybiblio = new clsBiblio { id = item.id, libellé = item.libellé};
}
}
clsBiblio[] biblioArray = new clsBiblio[] { mymodel.mybiblio };
ViewBag.mybiblio =GetSelectListItems(biblioArray);
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = mymodel.Email, Email = mymodel.Email };
var result = await UserManager.CreateAsync(user, mymodel.Password);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
// For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
// Send an email with this link
// string 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 <a href=\"" + callbackUrl + "\">here</a>");
return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
IEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
return View(mymodel);
}
и я изменил свою RegisterViewModel:
public class RegisterViewModel
{
[Required]
[EmailAddress]
[Key]
[Display(Name = "Email")]
public string Email { get; set; }
[Display(Name = "biblio")]
public virtual clsBiblio mybiblio { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} 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; }
}
и мое приложение User
public class ApplicationUser : IdentityUser
{
public virtual ICollection<clsBiblio> mybiblio { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("bibliothequeEntities", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public System.Data.Entity.DbSet<LibraryOnWeb.Models.RegisterViewModel> RegisterViewModels { get; set; }
public System.Data.Entity.DbSet<LibraryOnWeb.AspNetUser> AspNetUsers { get; set; }
public System.Data.Entity.DbSet<clsBiblio> bibliotheque { get; set; }
}