Роль равна нулю в запросе публикации для ASP. NET Core Razor Pages - PullRequest
0 голосов
/ 04 августа 2020

У меня есть эти Razor Pages, которые показывают текстовое поле и кнопку. После нажатия он создаст / вставит роль в таблицу. Проблема в том, что когда я устанавливаю точку останова в методе OnPostAsync, параметр role имеет значение null.

Это мой внешний код:

@page
@model CreateModel

@{
    ViewData["Title"] = "Create";
}
<h1>Create Role</h1>
<hr />
<div class="row">
    <div class="col-md-4">
            <form asp-route-returnUrl="@Model.ReturnUrl" method="post">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <div class="form-group">
                    <label asp-for="Input.Name"></label>
                    <input asp-for="Input.Name" class="form-control" />
                    <span asp-validation-for="Input.Name" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <input type="submit" value="Create" class="btn btn-primary" />
                </div>
            </form>
</div>
</div>

Это мой код программной части :

public class CreateModel : PageModel
{
    private readonly RoleManager<IdentityRole> _roleManager;

    public CreateModel(RoleManager<IdentityRole> roleManager)
    {
        _roleManager = roleManager;
    }

    [BindProperty]
    public IdentityRole Name { get; set; }

    public InputModel Input { get; set; }

    public string ReturnUrl { get; set; }

    public class InputModel
    {
        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 3)]
        [Display(Name = "Role Name")]

        public IdentityRole Name { get; set; }
        //public string Name { get; set; }
    }

    public void OnGet(string returnUrl = null)
    {
        ReturnUrl = returnUrl;
    }

    public async Task<IActionResult> OnPostAsync(IdentityRole role) {
        await _roleManager.CreateAsync(role);
        return Page();
    }
}

1 Ответ

2 голосов
/ 04 августа 2020

Проблема может возникнуть из-за возвращенного типа IdentityRole, в клиенте ваш браузер не знает, как преобразовать тип переменной в IdentityRole. Вот некоторые популярные типы: string, int, List<T> ...

Итак, в этом случае я предлагаю вместо этого использовать строку.

public InputModel Input { get; set; }

public class InputModel
{
    public string Name { get; set; }
}


public async Task<IActionResult> OnPostAsync() {
    await _roleManager.CreateAsync(new IdentityRole { Name = Input.Name });
    return Page();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...