Cómo comparar el valor entre el de la base de datos y el cliente .Net Core 2
Tenemos esta edición de páginas Razor (edit.cshtml) que se extiende desde el siguiente modelo de página y es muy básico, solo incluye 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);
}
}
También en esta página Editar, agregamos:
<input type="hidden" asp-for="User.UserRoles.ElementAt(0).RoleId" name="User.Current.RoleId" />
También hacemos la [BindProperty] en el código detrás de
public ApplicationUser User { get; set; }
Necesitamos averiguar si hay un cambio en este modelo. ¿Cuál es el enfoque para hacer esto?
MEDIO AMBIENTE
.NET Core 2.2Razor PagesUPDATE - 1:
En PostAsync, realizamos otra llamada a la base de datos:
var userRoleToUpdate = await _context.UserRoles
.FirstOrDefaultAsync(m => m.UserId == id.ToString());
Solo necesitamos comparar este valor con el cambio en una lista desplegable o no. No pudimos trabajar cómo.
UPDATE - 2:
Cambiamos según lo recomendado por @NevilleNazerane a continuación:
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; }
y agregó 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;
....
¿Es esto correcto? Obtuve el error: NullReferenceException: Arg_NullReferenceException en línea AssignClubUser.FirstName = user.FirstName;
UPDATE - 3:
Fixed creando un ModemView y luego en OnGetAsync () para la consulta, asegúrese de mapearlo con 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();