Выполните действие get с asp.net core 2.1 - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над ядром asp.net 2.1

Теперь у нас есть представления с такими классами, как:

enter image description here

Каждое представлениеу меня есть свой собственный класс, у моего класса есть метод OnGet(), поэтому я думаю, что это запрос Get при загрузке страницы.Но я помещаю точку останова в этот метод и никогда не нажимаю.

Я хочу сделать простой выбор, чтобы сделать SelectList в моем представлении, как:

public void OnGet()
        {

            var roles = _roleManager.Roles.ToList();

            List<SelectListItem> item = roles.ConvertAll(a =>
            {
                return new SelectListItem()
                {
                    Text = a.Id.ToString(),
                    Value = a.Name.ToString(),
                };
            }).ToList();

            var vm = new ApplicationRoleViewModel();

            vm.RolesToUser = roles
                         .Select(a => new SelectListItem()
                         {
                             Value = a.Id.ToString(),
                             Text = a.Name
                         })
                         .ToList();


            return ;
        }

Представление:

 <select asp-for="RoleId" asp-items="@Model.RolesToUser">
        <option>Please select one</option>
    </select>

Но он всегда выбрасывает ноль, потому что он никогда не возвращает результаты из OnGet(), мой вопрос.Как я могу сделать простое действие get в этой новой структуре представлений!С уважением, полный код:

AssignRoleToUser.cshtml.cs

namespace Security.WebUi.Pages
{
    public class AssignRoleToUserModel : PageModel
    {

        private readonly RoleManager<ApplicationRole> _roleManager;

        public AssignRoleToUserModel(
             RoleManager<ApplicationRole> roleManager
            )
        {
            _roleManager = roleManager;
        }


        public void OnGet()
        {

            var roles = _roleManager.Roles.ToList();

            List<SelectListItem> item = roles.ConvertAll(a =>
            {
                return new SelectListItem()
                {
                    Text = a.Id.ToString(),
                    Value = a.Name.ToString(),
                };
            }).ToList();

            var vm = new ApplicationRoleViewModel();

            vm.RolesToUser = roles
                         .Select(a => new SelectListItem()
                         {
                             Value = a.Id.ToString(),
                             Text = a.Name
                         })
                         .ToList();


            return ;
        }


    }
}

Просмотр:

@page
@model Security.Dto.ViewModels.ApplicationRoleViewModel


    <h4>Assign role to user</h4>
    <hr />
    <div asp-validation-summary="All" class="text-danger"></div>
    <select asp-for="RoleId" asp-items="@Model.RolesToUser">
        <option>Please select one</option>
    </select>

    <br />


@section Scripts {

}

ApplicationRoleViewModel:

namespace Security.Dto.ViewModels
{
    public class ApplicationRoleViewModel
    {
        public Guid RoleId { get; set; }
        public List<SelectListItem> RolesToUser { get; set; }
    }
}

1 Ответ

0 голосов
/ 13 ноября 2018

Вы используете страницу Razor, по-видимому.В Razor Pages моделью для представления является сам PageModel, т. Е. Файл с задним кодом.В своем действии OnGet вы обновляете некоторый случайный класс и устанавливаете для него свойство, но затем он просто собирает мусор.Вместо этого вы должны иметь это свойство RolesToUser на самом PageModel и установить его:

public IEnumerable<SelectListItem> RolesToUser { get; set; }

...

public void OnGet()
{
    var roles = _roleManager.Roles.ToList();

    RolesToUser = roles.Select(a => new SelectListItem()
    {
        Value = a.Id.ToString(),
        Text = a.Name
    }).ToList();
}
...