简体   繁体   中英

Why my SelectListItem can not be edited ASP.NET Core MVC

I am trying to get the point and solve problem with SelectListItem . As Admin I want to be able to assign Client to register User

public IActionResult Edit(string Id)
{
    var user = _db.ApplicationUsers.FirstOrDefault(u => u.Id == Id);

    if (user == null)
    {
        return NotFound();
    }

    var userRole = _db.UserRoles.ToList();
    var roles = _db.Roles.ToList();
    var client = _db.Clients.ToList();
    var role = userRole.FirstOrDefault(u => u.UserId == user.Id);

    if (role != null)
    {
        user.Role = roles.FirstOrDefault(u => u.Id == role.RoleId).Id;
    }

    if(client != null)
    {
        
    }

    user.RoleList = _db.Roles.Select(u => new Microsoft.AspNetCore.Mvc.Rendering.SelectListItem
    {
        Text = u.Name,
        Value = u.Id
    });

    user.ClientList = _db.Clients.Select(u => new Microsoft.AspNetCore.Mvc.Rendering.SelectListItem
    {
        Text = u.Name,
        Value = u.Id.ToString()
    });
    

    return View(user);
}



[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(ApplicationUser user)
{
    if (ModelState.IsValid)
    {
        var objFromDb = _db.ApplicationUsers.FirstOrDefault(u => u.Id == user.Id);

        if (objFromDb == null)
        {
            return NotFound();
        }

        var userRole = _db.UserRoles.FirstOrDefault(u => u.UserId == objFromDb.Id);

        if (userRole != null)
        {
            var previousRoleName = _db.Roles.Where(u => u.Id == userRole.RoleId).Select(e => e.Name).FirstOrDefault();
            await _userManager.RemoveFromRoleAsync(objFromDb, previousRoleName);
        }

        await _userManager.AddToRoleAsync(objFromDb, _db.Roles.FirstOrDefault(u => u.Id == user.Role).Name);
        objFromDb.Name = user.Name;
        objFromDb.Email = user.Email;
        objFromDb.PhoneNumber = user.PhoneNumber;
        objFromDb.StreetAddress = user.StreetAddress;
        objFromDb.City = user.City;
        objFromDb.PostalCode = user.PostalCode;
        objFromDb.RoleList = user.RoleList;
        objFromDb.ClientList = user.ClientList;
        _db.SaveChanges();
        return RedirectToAction(nameof(Index));
    }

    user.RoleList = _db.Roles.Select(u => new Microsoft.AspNetCore.Mvc.Rendering.SelectListItem
    {
        Text = u.Name,
        Value = u.Id
    });

    user.ClientList = _db.Clients.Select(u => new Microsoft.AspNetCore.Mvc.Rendering.SelectListItem
    {
        Text = u.Name,
        Value = u.Id.ToString()
    });

    return View(user);
}

Somehow everything works fine only I can not change ClientList and I try to debug application but I can not see anything wrong. I would be very thankfull If someone could check code and tell me where I made mistake? What is wrong with this code, why my ClientList cannot be Edited

The error message tell me that ModelState is false and I notice error here

objFromDb.ClientList = user.ClientList;

And I change to

objFromDb.ClientId= user.ClientId;

And now it works: :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM