C# 在mvc项目中通过注册页创建applicationuser时出现问题?

C# 在mvc项目中通过注册页创建applicationuser时出现问题?,c#,asp.net-mvc,asp.net-mvc-5,asp.net-identity,C#,Asp.net Mvc,Asp.net Mvc 5,Asp.net Identity,我遇到了一个奇怪的问题,我在这个站点上发现了几个线程,它们解决了我遇到的问题,但是它们似乎都能够通过在运行Createasync方法并让用户使用之前在applicationuser中设置securitystamp来解决问题 除了不能解决任何问题之外,我一直得到一个异常,它说“value”参数不能为null 这是我的扩展applicationuser类: public class ApplicationUser : IdentityUser { [Required]

我遇到了一个奇怪的问题,我在这个站点上发现了几个线程,它们解决了我遇到的问题,但是它们似乎都能够通过在运行Createasync方法并让用户使用之前在applicationuser中设置securitystamp来解决问题

除了不能解决任何问题之外,我一直得到一个异常,它说“value”参数不能为null

这是我的扩展applicationuser类:

public class ApplicationUser : IdentityUser
    {

        [Required]
        [Display(Name = "Fornavn")]
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Titlen skal være på mellem 6 og 50 tegn")]
        public string FirstName { get; set; }

        [Required]
        [Display(Name = "Efternavn")]
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Titlen skal være på mellem 6 og 50 tegn")]
        public string LastName { get; set; }

        [Required]
        [Display(Name = "E-mail")]
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Titlen skal være på mellem 6 og 50 tegn")]
        public string Email { get; set; }

        [Display(Name = "Profilbillede")]
        public String ProfileImagePath { get; set; }

        [Display(Name = "Uddannelsessted")]
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Titlen skal være på mellem 6 og 50 tegn")]
        public String Institution { get; set; }

        [Display(Name = "")]
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Titlen skal være på mellem 6 og 50 tegn")]
        public String Semester { get; set; }

        [Display(Name = "Speciale")]
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Titlen skal være på mellem 6 og 50 tegn")]
        public String Major { get; set; }

        [Display(Name = "Niveau")]
        public int? Level { get; set; }

        [Display(Name = "Jobtitel")]
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Titlen skal være på mellem 6 og 50 tegn")]
        public String Position { get; set; }

        [Display(Name = "Kort beskrivelse")]
        [StringLength(1000, MinimumLength = 100, ErrorMessage = "Titlen skal være på mellem 100 og 1000 tegn")]
        public String Description { get; set; }

        public int CurrentCase { get; set; }

        public int CurrentExamSet { get; set; }


    }
这是我在帐户控制器中的注册方法:

[HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Register(RegisterViewModel model, HttpPostedFileBase image)
        {

            if (ModelState.IsValid)
            {

                var user = model.GetUser();
                if (image != null)
                {
                    if (!Directory.Exists(Server.MapPath("~") + "/Images/ProfileImages"))
                        Directory.CreateDirectory(Server.MapPath("~") + "/Images/ProfileImages/");
                    var guid = Guid.NewGuid().ToString();
                    DataHelper.ResizeAndSave(Server.MapPath("~") + "/Images/ProfileImages/", guid, image.InputStream, 170);
                    user.ProfileImagePath = Server.MapPath("~") + "/Images/ProfileImages/" + guid + ".jpg";
                }
                else
                {
                    user.ProfileImagePath = "";
                }
                user.SecurityStamp = Guid.NewGuid().ToString();
                var result = await UserManager.CreateAsync(user, model.Password);             

                if (result.Succeeded)
                {
                    return RedirectToAction("Index", "Home");
                }

            }

            // If we got this far, something failed, redisplay form

            return View(model);

        }
我尝试过将每个字段值(即使在基类中)设置为某个值,以便applicationuser类中甚至没有一个字段值为null,但仍然会弹出错误

如果有人能帮助我,我将不胜感激,因为这个问题是严重的恼人,我不能在我的项目进一步

堆栈跟踪:

[ArgumentNullException: En værdi må ikke være null.
Parameternavn: value]
   System.ComponentModel.DataAnnotations.ValidationContext.set_DisplayName(String value) +48859
   System.Data.Entity.Utilities.ValidationContextExtensions.SetDisplayName(ValidationContext validationContext, InternalMemberEntry property, DisplayAttribute displayAttribute) +274
   System.Data.Entity.Internal.Validation.ValidationAttributeValidator.Validate(EntityValidationContext entityValidationContext, InternalMemberEntry property) +106
   System.Data.Entity.Internal.Validation.PropertyValidator.Validate(EntityValidationContext entityValidationContext, InternalMemberEntry property) +148
   System.Data.Entity.Internal.Validation.EntityValidator.ValidateProperties(EntityValidationContext entityValidationContext, InternalPropertyEntry parentProperty, List`1 validationErrors) +203
   System.Data.Entity.Internal.Validation.TypeValidator.Validate(EntityValidationContext entityValidationContext, InternalPropertyEntry property) +105
   System.Data.Entity.Internal.Validation.EntityValidator.Validate(EntityValidationContext entityValidationContext) +55
   System.Data.Entity.Internal.InternalEntityEntry.GetValidationResult(IDictionary`2 items) +295
   System.Data.Entity.DbContext.ValidateEntity(DbEntityEntry entityEntry, IDictionary`2 items) +86
   Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext`1.ValidateEntity(DbEntityEntry entityEntry, IDictionary`2 items) +2946
   System.Data.Entity.DbContext.GetValidationErrors() +290
   System.Data.Entity.Internal.InternalContext.SaveChangesAsync(CancellationToken cancellationToken) +143
   System.Data.Entity.Internal.LazyInternalContext.SaveChangesAsync(CancellationToken cancellationToken) +66
   System.Data.Entity.DbContext.SaveChangesAsync(CancellationToken cancellationToken) +60
   System.Data.Entity.DbContext.SaveChangesAsync() +63
   Microsoft.AspNet.Identity.EntityFramework.<SaveChanges>d__0.MoveNext() +148
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21
   Microsoft.AspNet.Identity.EntityFramework.<CreateAsync>d__5.MoveNext() +403
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21
   Microsoft.AspNet.Identity.<CreateAsync>d__0.MoveNext() +984
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
   Microsoft.AspNet.Identity.<CreateAsync>d__10.MoveNext() +883
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +24
   MEV3.Controllers.<Register>d__1a.MoveNext() in c:\Users\Little\Desktop\ASP.NET\MEV3\MEV3\Controllers\AccountController.cs:252
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
   System.Runtime.CompilerServices.TaskAwaiter.GetResult() +21
   lambda_method(Closure , Task ) +64
   System.Threading.Tasks.TaskHelpersExtensions.ThrowIfFaulted(Task task) +64
   System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +114
   System.Web.Mvc.Async.<>c__DisplayClass34.<BeginInvokeAsynchronousActionMethod>b__33(IAsyncResult asyncResult) +65
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3c() +117
   System.Web.Mvc.Async.<>c__DisplayClass45.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3e() +323
   System.Web.Mvc.Async.<>c__DisplayClass30.<BeginInvokeActionMethodWithFilters>b__2f(IAsyncResult asyncResult) +44
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50
   System.Web.Mvc.Async.<>c__DisplayClass28.<BeginInvokeAction>b__19() +72
   System.Web.Mvc.Async.<>c__DisplayClass1e.<BeginInvokeAction>b__1b(IAsyncResult asyncResult) +185
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(IAsyncResult asyncResult, ProcessRequestState innerState) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651116
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
当我单步执行代码时,在AccountController中完成此方法后,错误立即弹出:

protected override void Dispose(bool disposing)
        {
            if (disposing && UserManager != null)
            {
                UserManager.Dispose();
                UserManager = null;
            }
            base.Dispose(disposing);
        }

验证失败的不是
SecurityStamp
,而是
Email
属性
IdentityUser
已具有
Email
属性,因此
ApplicationUser的
Email
属性“隐藏”了
IdentityUser
属性。
ApplicationUser
中删除
Email
属性以解决此问题<在
IdentityUser
中已经需要code>Email
。本地化错误消息和标签的其他注释将它们放在您的
RegisterViewModel

我有一个使用本地化显示名称的解决方案。其中一些在所有可用语言中都没有价值。这在显示razor页面时正常工作,页面使用默认语言

但由于某些原因,在将实体保存到数据库时,这不起作用(当然,“为什么EF在保存时使用显示属性”的问题仍然悬而未决)

这一行暗示了原因

 System.ComponentModel.DataAnnotations.ValidationContext.set_DisplayName(String value) +48859
然后你就有了这个

        [Display(Name = "")]
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Titlen skal være på mellem 6 og 50 tegn")]
        public String Semester { get; set; }

它不是null,但删除空值可能会有所帮助。

w这是您希望将user.SecurityStamp设置为自定义Guid的原因,因为它是由identity framework自动生成和插入的?因为stackoverflow上的其他类似线程说这解决了问题。但我的问题没有解决。不管我是否这样做,例外情况都是一样的。你能发布你的GetUser()方法吗?当然现在更新了。这只是viewmodel中的一种方法,实际上是一种相当混乱的方法。现在只是这样,因为我遵循了一个教程来熟悉这个框架。本教程适用于新项目,在applicationuser上没有附加值。我希望这能解决它,只有一个问题。当我从应用程序中删除该值时,User vs将不再将该电子邮件识别为现有值。它显示了我的getuser方法中不再存在类似电子邮件的错误。我需要任何特殊的语法来设置基类的email值吗?我只是在完全删除email值后尝试了一下,但仍然得到了相同的异常(是的,我更新了dbase和所有这些):/当我从applicationuser中删除所有验证时,它似乎起作用了,sry一开始忘记了这一部分。但我认为电子邮件的价值与此无关。但是,关于验证消息等,您似乎是对的。当它在applicationuser上时,它不起作用。所以谢谢!:)
 System.ComponentModel.DataAnnotations.ValidationContext.set_DisplayName(String value) +48859
        [Display(Name = "")]
        [StringLength(50, MinimumLength = 0, ErrorMessage = "Titlen skal være på mellem 6 og 50 tegn")]
        public String Semester { get; set; }