Как связать свойство в RegisterModel в Identity без использования ViewBag - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь изменить какой-то код подстановки с помощью Identity. Я понимаю, что это не MVC, а представления с кодом позади.

Я хочу связать список объектов со списком флажков. Я могу сделать это с помощью ViewBag, но я предпочитаю использовать строго типизированные объекты, как если бы мы использовали ViewModel. Как этого добиться?

  [AllowAnonymous]
    public class RegisterModel : PageModel
    {
        private readonly SignInManager<ApplicationUser> _signInManager;
        private readonly UserManager<ApplicationUser> _userManager;
        private readonly ILogger<RegisterModel> _logger;
        private readonly IEmailSender _emailSender;
        private readonly RoleManager<IdentityRole> _roleManager;
        private readonly ApplicationDbContext _context;

        public RegisterModel(
            UserManager<ApplicationUser> userManager,
            SignInManager<ApplicationUser> signInManager,
            ILogger<RegisterModel> logger,
            IEmailSender emailSender,
            RoleManager<IdentityRole> roleManager,
            ApplicationDbContext context)
        {
            _userManager = userManager;
            _signInManager = signInManager;
            _logger = logger;
            _emailSender = emailSender;
            _roleManager = roleManager;
            _context = context;
        }

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



        public string ReturnUrl { get; set; }

        public class InputModel
        {
            [Required(ErrorMessage = "Email est obligatoire")]
            [EmailAddress]
            [Display(Name = "Email")]
            public string Email { get; set; }

            [Required(ErrorMessage = "Mot de passe est obligatoire")]
            [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "Mot de passe")]
            public string Password { get; set; }

            [DataType(DataType.Password)]
            [Display(Name = "Confirmez le mot de passe")]
            [Compare("Password", ErrorMessage = "Les 2 mots de passes ne sont pas identiques.")]
            public string ConfirmPassword { get; set; }

            //Profil = Role
            public string Profil { get; set; }

            public string NomMotif { get; set; }

            public bool IsChecked { get; set; }

            [BindProperty]
            public List<Motif> ListMotifs { get; set; }

        }

public void OnGet (string returnUrl = null) {

// Нужно ли нам создавать это, как если бы мы делали это с моделью представления?

 InputModel inputModel = new InputModel();
    ViewData["roles"] = _roleManager.Roles.ToList();
    ViewData["motifs"] = _context.Motif.ToList();

    inputModel.ListMotifs = _context.Motif.ToList();

    ReturnUrl = returnUrl;
 }

}

  <div class="form-group">

                @for (var i = 0; i < Model.Input.ListMotifs.Count;i++)
                {
                <div class="form-check">
                    <input type="checkbox" name="IsChecked_@i" asp-for="Input.ListMotifs[i].IsChecked" /> @Model.Input.ListMotifs[i].CodeMotif @Model.Input.ListMotifs[i].NomMotif <br />
                </div>
                }
            </div>

1 Ответ

0 голосов
/ 08 ноября 2019

Обнаружена проблема.

Я переместил список из InputModel, и он работает

[BindProperty]
        public List<Motif> ListMotifs { get; set; }

 public void OnGet(string returnUrl = null)
        {


            ListMotifs = _context.Motif.ToList();
            ReturnUrl = returnUrl;
         }


 @for (var i = 0; i < Model.ListMotifs.Count; i++)
                {
                    <div class="form-check">
                        <input type="checkbox" name="IsChecked_@i" asp-for="ListMotifs[i].IsChecked" /> @Model.ListMotifs[i].CodeMotif @Model.ListMotifs[i].NomMotif <br />
                    </div>
                }
...