การตรวจสอบล้มเหลวสำหรับเอนทิตีอย่างน้อยหนึ่งรายการ ข้อผิดพลาดในการตรวจสอบความถูกต้อง: จำเป็นต้องกรอกข้อมูลชื่อผู้ใช้


0

กรุณาฉันได้รับข้อผิดพลาดเมื่อใดก็ตามที่ฉันพยายามที่จะปรับปรุงรูปแบบตัวตนของผู้ใช้ของฉันผ่านมุมมองบางส่วนเพียงอย่างเดียว นี่เป็นวิธีการบางส่วนของฉัน:

 [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 ของฉันเป็นสตริงและไม่จำเป็นต้องใช้ มันอาจจะมาจากฐานข้อมูล ขอบคุณ


ในคลาส IdentityUser ของคุณฉันไม่เห็นคุณสมบัติชื่อ UserName แต่คุณกำลังตั้งค่าคุณสมบัติชื่อ UserName ในวิธีการ CheckOut () อย่างไร?
Fakhar Ahmad Rasul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.