Как сохранить идентификатор из списка выбора в поле другой таблицы? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть две таблицы: пользователи и роли, каждому пользователю назначается роль. Используя Razor Pages, я могу создать нового пользователя и выбрать его роль в раскрывающемся списке, заполненном таблицей ролей. Когда я пытаюсь сохранить нового пользователя, я создаю новую роль в таблице ролей, а новый идентификатор роли сохраняется в таблице пользователей.

Класс роли:

public class Role
{
    [Display(Name="Role ID")]
    public int RoleId { get; set; }
    [Display(Name="Role Name")]
    public string name { get; set; }
    [Display(Name="Role Description")]
    public string description { get; set; }
}

Торговый представитель. Класс:

public class SalesRep
{
    [Display(Name="Sales Rep. ID")]
    public int SalesRepId { get; set; }
    // unnecessary code removed ...
    [Display(Name="Role")]
    public Role role { get; set; }
}

Create.cshtml:

<div class="form-group">
    <label asp-for="SalesRep.role" class="control-label"></label>
    <select asp-for="SalesRep.role" class="form-control" asp-items="@Model.RoleList">
    </select>
</div>

PageModel Класс:

protected void PopulateRoles() // called from OnGet()
{
    RoleList = new SelectList(_context.Roles, nameof(Role.RoleId), nameof(Role.name));
}

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    _context.SalesReps.Add(SalesRep);
    await _context.SaveChangesAsync();

    return RedirectToPage("./Index");
}

Это не то, что мне нужно, мне нужно сохранить нового пользователя с RoleID из таблицы ролей, а не создавать нового.

1 Ответ

0 голосов
/ 05 июня 2019

Поскольку вы используете <select asp-for="SalesRep.role", тип Salesrep.role не соответствует типу значения (RoleId) раскрывающегося списка.

Если вы используете отношения, вам нужно добавить внешний ключ (roleId по соглашению) для вашего Role свойства навигации в SalesRep модель

public class SalesRep
{
    [Display(Name = "Sales Rep. ID")]
    public int SalesRepId { get; set; }

    public string Name { get; set; }

    // unnecessary code removed ...

    public int roleId { get; set; }

    [Display(Name = "Role")]
    [ForeignKey("roleId")]
    public Role role { get; set; }
}

Page

<div class="form-group">
            <label asp-for="SalesRep.role" class="control-label"></label>
            <select asp-for="SalesRep.roleId" class="form-control" asp-items="@Model.RoleList"></select>
</div>

Не забудьте применить миграцию и обновить базу данных.См. Основные отношения EF

...