为啥我的 SelectListItem 无法编辑 ASP.NET Core MVC

Posted

技术标签:

【中文标题】为啥我的 SelectListItem 无法编辑 ASP.NET Core MVC【英文标题】:Why my SelectListItem can not be edited ASP.NET Core MVC为什么我的 SelectListItem 无法编辑 ASP.NET Core MVC 【发布时间】:2021-03-08 09:39:38 【问题描述】:

我试图用SelectListItem 解决问题。作为管理员,我希望能够分配Client 来注册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);

不知何故一切正常,只是我无法更改ClientList,我尝试调试应用程序,但我看不到任何错误。 如果有人可以检查代码并告诉我哪里出错了,我将非常感激?这段代码有什么问题,为什么我的ClientList不能是Edited

【问题讨论】:

【参考方案1】:

错误消息告诉我ModelState 是假的,我注意到这里有错误

objFromDb.ClientList = user.ClientList;

我改成

objFromDb.ClientId= user.ClientId;

现在它可以工作了! :)

【讨论】:

以上是关于为啥我的 SelectListItem 无法编辑 ASP.NET Core MVC的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法保存 Django ModelForm 博客的编辑?

使用 selectlistitem 默认值返回模型以查看错误

请问为啥用ipad编辑的word文档,发送到安卓手机(通过企鹅)会无法下载无法在线预览?

为啥我无法访问本地 XAMPP 上的某些页面或目录?

编辑后不刷新 ALV。为啥?

本体,为啥我的protege里英文无法正常显示,会乱码