请问,每当我尝试通过仅用于子视图的局部视图更新用户身份模型时,都会出现错误。 这是我的部分方法:
[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用户名是一个字符串,不是必需的。可能来自数据库。谢谢