Исправлено путем создания ModemView, а затем OnGetAsync () ... см. ОБНОВЛЕНИЕ - 3

есть эта страница редактирования Razor (edit.cshtml), которая расширена от следующей модели страницы, и она очень проста, включает только PopulateRolesDropDownList:

public class RoleNamePageModel : PageModel
{
    public SelectList RoleNameSL { get; set; }

    public void PopulateRolesDropDownList(ApplicationDbContext _context,
        object selectedRole = null)
    {
        var rolesQuery = from d in _context.Roles
                               orderby d.Name // Sort by name.
                               select d;

        RoleNameSL = new SelectList(rolesQuery,
                    "RoleId", "Name", selectedRole);
    }

}

Также на этой странице редактирования мы добавили:

<input type="hidden" asp-for="User.UserRoles.ElementAt(0).RoleId" name="User.Current.RoleId" />

Мы также делаем [BindProperty] в коде

public ApplicationUser User { get; set; }

Нам нужно выяснить, есть ли изменения в этой модели. Какой подход сделать это?

ОКРУЖАЮЩАЯ ОБСТАНОВКА:

.NET Core 2.2Бритвенные страницы

ОБНОВЛЕНИЕ - 1:

На PostAsync мы сделали еще один вызов в базу данных:

var userRoleToUpdate = await _context.UserRoles
                                        .FirstOrDefaultAsync(m => m.UserId == id.ToString());

Нам просто нужно сравнить это значение с изменением в раскрывающемся списке или нет. Мы не могли работать как.

ОБНОВЛЕНИЕ - 2:

Мы изменили в соответствии с рекомендацией @NevilleNazerane ниже:

public class AssignClubUserViewModel
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public string UserName { get; set; }

        public Guid SelectedRoleID { get; set; }

    }

    [BindProperty]
    public AssignClubUserViewModel AssignClubUser { get; set; }

и добавил OnGetAsync:

public async Task<IActionResult> OnGetAsync(Guid? id)
    {
        if (id == null)
            return NotFound();

        var user = await _context.Users
                        .Include(u => u.ClubApplicationUsers)
                        .FirstOrDefaultAsync(m => m.Id == id.ToString());

        AssignClubUser.FirstName = user.FirstName;
        AssignClubUser.LastName = user.LastName;
        AssignClubUser.UserName = user.UserName;
        AssignClubUser.SelectedClubID = 
        user.ClubApplicationUsers.ElementAt(0).ClubID;

        ....

Это правильно? Я получил ошибку: NullReferenceException: Arg_NullReferenceException в строке AssignClubUser.FirstName = user.FirstName;

ОБНОВЛЕНИЕ - 3:

Исправлено путем создания ModemView, а затем в OnGetAsync () для запроса убедитесь, что сопоставлены с ModelView:

var user = await _context.Users
                            .Include(u => u.ClubApplicationUsers)
                            .Where(t => t.Id == id.ToString())
                            .Select(t => new AssignClubUserViewModel<ApplicationUser>
                            {
                                FirstName = t.FirstName,
                                LastName = t.LastName,
                                UserName = t.UserName,
                                SelectedClubID = t.ClubApplicationUsers.ElementAt(0).ClubID
                            }).SingleAsync();

Ответы на вопрос(1)

Ваш ответ на вопрос