首页 > 解决方案 > 为什么我只能使用 Identity 更新 ASP.Net Core 中的用户数据?

问题描述

我正在测试我的应用程序,我看到我只能更新单个用户的信息而不能更新其他用户的信息,应用程序没有给我错误消息或任何东西,它只是重新加载页面并且数据没有到达数据库数据,而对于单个用户,这不会发生。

using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.ComponentModel.DataAnnotations;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using UniJobs.Data;
using UniJobs.Models;

namespace UniJobs.Areas.Identity.Pages.Account.Manage
{
public partial class IndexModel : PageModel
{
    private readonly UserManager<Usuarios> _userManager;
    private readonly SignInManager<Usuarios> _signInManager;
    private readonly ApplicationDbContext _context;
    private readonly IWebHostEnvironment _webHostEnvironment;

    public IndexModel(
        UserManager<Usuarios> userManager,
        SignInManager<Usuarios> signInManager,
        ApplicationDbContext context,
       IWebHostEnvironment webHostEnvironment)
    {
        _userManager = userManager;
        _signInManager = signInManager;
        this._context = context;
        this._webHostEnvironment = webHostEnvironment;
    }

    public string Username { get; set; }

    [TempData]
    public string StatusMessage { get; set; }

    [BindProperty]
    public InputModel Input { get; set; }

    public class InputModel
    {
        [Display(Name = "Imagen de perfil")]
        public IFormFile InputImagen { get; set; }

        [Display(Name = "¿Quién Soy?")]
        public string QuienSoy { get; set; }

        [Display(Name = "Sobre mis habilidades")]
        public string SobreHabilidades { get; set; }

        [Display(Name = "Sobre mis aptitudes")]
        public string SobreAptitudes { get; set; }

        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "Nombre")]
        public string FirstName { get; set; }

        [Display(Name = "Provincia")]
        public int? Provincia { get; set; }

        [Display(Name = "Mi universidad")]
        public int? MiUni { get; set; }

        [Required]
        [DataType(DataType.Text)]
        [Display(Name = "Apellido")]
        public string LastName { get; set; }

        [DataType(DataType.Date)]
        [Display(Name = "Fecha de nacimiento")]
        public DateTime? BirthDate { get; set; }

        [Phone]
        [Display(Name = "Phone number")]
        public string PhoneNumber { get; set; }
    }

    private async Task LoadAsync(Usuarios user)
    {
        var userName = await _userManager.GetUserNameAsync(user);
        var phoneNumber = await _userManager.GetPhoneNumberAsync(user);

        user.ID_Uni = _context.ListaEstudiantesUniversidades.Where(U => U.FK_UsuarioID == user.Id)
                              .Select(U => U.FK_UniversidadID).FirstOrDefault();

        Username = userName;

        Input = new InputModel
        {
            FirstName = user.FirstName,
            LastName = user.LastName,
            BirthDate = user.BirthDate,
            Provincia = user.FK_ProvinciaID,
            PhoneNumber = phoneNumber,
            MiUni = user.ID_Uni,
            QuienSoy = user.QuienSoy,
            SobreHabilidades = user.SobreHabilidades,
            SobreAptitudes = user.SobreAptitudes
        };
    }

    public async Task<IActionResult> OnGetAsync()
    {
        ViewData["FK_ProvinciaID"] = new SelectList(_context.Provincias, "ProvinciasID", "Provincia");
        ViewData["Universidad"] = new SelectList(_context.Universidades, "UniversidadesID", "NombreUniversidad");

        var user = await _userManager.GetUserAsync(User);
        if (user == null)
        {
            return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
        }
        await LoadAsync(user);
        return Page();
    }

    public async Task<IActionResult> OnPostAsync()
    {
        var user = await _userManager.GetUserAsync(User);
        if (user == null)
        {
            return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
        }

        if (!ModelState.IsValid)
        {
            await LoadAsync(user);
            return Page();
        }

        var phoneNumber = await _userManager.GetPhoneNumberAsync(user);
        if (Input.PhoneNumber != phoneNumber)
        {
            var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber);
            if (!setPhoneResult.Succeeded)
            {
                StatusMessage = "Unexpected error when trying to set phone number.";
                return RedirectToPage();
            }
        }

        if (Input.InputImagen != null)
        {
            //Save image to wwwroot/image
            string wwwRootPath = _webHostEnvironment.WebRootPath;
            string ImageName = Path.GetFileNameWithoutExtension(Input.InputImagen.FileName);
            string ExtensionImage = Path.GetExtension(Input.InputImagen.FileName);
            user.ProfileImage = ImageName = ImageName + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ExtensionImage;
            string path = Path.Combine(wwwRootPath + "/UsersImages/Users/", ImageName);
            using (var fileStream = new FileStream(path, FileMode.Create))
            {
                await Input.InputImagen.CopyToAsync(fileStream);
            }
            //Insert record
        }

        if (Input.MiUni != _context.ListaEstudiantesUniversidades.Where(U => U.FK_UsuarioID == user.Id)
                                   .Select(U => U.FK_UniversidadID).FirstOrDefault())
        {
            var UniID = _context.ListaEstudiantesUniversidades.Where(U => U.FK_UsuarioID == user.Id)
                                .Select(U => U.ListaEstudiantesUniversidadesID).FirstOrDefault();

            var StudentUni = await _context.ListaEstudiantesUniversidades.FindAsync(UniID);

            _context.ListaEstudiantesUniversidades.Remove(StudentUni);
            await _context.SaveChangesAsync();

            var Uni = _context.ListaEstudiantesUniversidades.Add(new ListaEstudiantesUniversidades
            {
                FK_UniversidadID = Input.MiUni.Value,
                FK_UsuarioID = user.Id
            });
            await _context.SaveChangesAsync();
        }
        if (Input.FirstName != user.FirstName)
        {
            user.FirstName = Input.FirstName;
        }
        if (Input.LastName != user.LastName)
        {
            user.LastName = Input.LastName;
        }
        if (Input.BirthDate != user.BirthDate)
        {
            user.BirthDate = Input.BirthDate;
        }
        if (Input.Provincia != user.FK_ProvinciaID)
        {
            user.FK_ProvinciaID = Input.Provincia;
        }
        if (Input.QuienSoy != user.QuienSoy)
        {
            user.QuienSoy = Input.QuienSoy;
        }
        if (Input.SobreHabilidades != user.SobreHabilidades)
        {
            user.SobreHabilidades = Input.SobreHabilidades;
        }
        if (Input.SobreAptitudes != user.SobreAptitudes)
        {
            user.SobreAptitudes = Input.SobreAptitudes;
        }

        await _userManager.UpdateAsync(user);

        await _signInManager.RefreshSignInAsync(user);
        StatusMessage = "Your profile has been updated";
        return RedirectToPage();
    }
  }
}

这是身份索引类的代码

标签: asp.net-coreidentity

解决方案


推荐阅读