Проверка не удалась для одного или нескольких объектов.Ошибки валидации: обязательное поле UserName - PullRequest
0 голосов
/ 29 января 2019

Пожалуйста, я получаю сообщение об ошибке всякий раз, когда пытаюсь обновить свою модель идентификации пользователя с помощью только частичного представления.Это мой частичный метод:

 [HttpGet]
   [ChildActionOnly]
    public ActionResult CheckOut(string Id)
    {
        Id = HttpContext.User.Identity.GetUserId();
        var pickupuser = db.Users.Single(s => s.Id == Id);
        CheckOutViewModel p = new CheckOutViewModel();
        pickupuser.SurName = p.SurName;
        pickupuser.UserName = p.UserName;
        pickupuser.FirstName = p.FirstName;
        pickupuser.DeliveryAddress = p.DeliveryAddress;
        pickupuser.CustomerPhone = p.CustomerPhone;
        pickupuser.DeliveryDate = p.DeliveryDate;
        pickupuser.DeliveryTime = p.DeliveryTime;
        pickupuser.CouponCode = p.CouponCode;
        return PartialView("CheckOut", pickupuser);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> CheckOut(CheckOutViewModel appuser)
    {
        if (ModelState.IsValid)
        {
            var currentUser = User.Identity.GetUserId();
            var cUser = db.Users.Single(u => u.Id == currentUser);
            cUser.FirstName = appuser.FirstName;
            cUser.SurName = appuser.SurName;
            cUser.UserName = appuser.UserName;
            cUser.CustomerPhone = appuser.CustomerPhone;
            cUser.DeliveryDate = appuser.DeliveryDate;
            cUser.DeliveryTime = appuser.DeliveryTime;
            cUser.CouponCode = appuser.CouponCode;

            try
            {
                //db.Entry(applicationUser).State = EntityState.Modified;
                await db.SaveChangesAsync();
            }
            catch (DbEntityValidationException ex)
            {
                var errorMessages = ex.EntityValidationErrors
                    .SelectMany(x => x.ValidationErrors)
                    .Select(x => x.ErrorMessage);
                var fullMessage = string.Join("", errorMessages);
                var exceptionMessage = string.Concat(ex.Message, "The validation errors are:", fullMessage);
                throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
            }
        }
        return View(appuser);
    }

и ошибка, которую я получаю:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.The validation errors are:The UserName field is required.

Это родительский метод, в который я передал метод CheckOut () в:

 public ActionResult DisplayCheckOut()
    {
        List<ProductsViewModel> ShoppingCart = productList;
        var cUsers = HttpContext.User.Identity.Name;
        ViewBag.email = db.Users.Where(d => d.UserName == cUsers).Select(a => a.Email).SingleOrDefault();
        ViewBag.phone = db.Users.Where(d => d.UserName == cUsers).Select(a => a.CustomerPhone).SingleOrDefault();
        return View(ShoppingCart);
    }

мой класс модели идентификации:

public class ApplicationUser : IdentityUser
{
    public string CustomerPhone { get; set; }
    public string CustomerLocation { get; set; }
    public string CustomerImage { get; set; }
    public string SurName { get; set; }
    public string FirstName { get; set; }
    public string CouponCode { get; set; }
    [DataType(DataType.Date)]
    public DateTime? DeliveryDate { get; set; }
    [DataType(DataType.Time)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "0:HH:mm")]
    public DateTime? DeliveryTime { get; set; }
    public string OrderStatus { get; set; }
    public string DeliveryAddress { get; set; }
    public string TableNo { get; set; }
    public string Comment { 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 CheckOutViewModel
{
    [Display(Name = "Surname")]
    public string SurName { get; set; }

    [Display(Name = "Firstname")]
    public string FirstName { get; set; }

    [Display(Name = "Phone No")]
    public string CustomerPhone { get; set; }
    public string UserName { get; set; }

    [Display(Name = "Shipping Address")]
    //public string CustomerLocation { get; set; }
    public DateTime? DeliveryTime { get; set; }
    public DateTime? DeliveryDate { get; set; }
    public string DeliveryAddress { get; set; }

    [Display(Name = "Enter Coupon Code")]
    public string CouponCode { get; set; }
}

Вывод: я проверил все свои свойства, и мое имя пользователя viewmodels является строкой и являетсяне требуется.это может быть из базы данных.спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...