Как связать значения базы данных в приложении ASP. NET Core MVC? - PullRequest
2 голосов
/ 06 апреля 2020

Я пытаюсь создать ASP. NET Core 3.1 MVC веб-приложение с использованием идентификатора. В приложении есть пользователи и администратор. Администратор может создавать новые задачи и назначать их пользователям.

Я действительно застрял с последним, пытаясь найти решение, но его реализация идет не так.

В моей базе данных есть AspNetUsers, который, как вы знаете, содержит user Id, Task с taskId и недавно добавленный Assign с и идентификатором пользователя и задачи. Поэтому моя идея заключается в том, чтобы создать выпадающий список, который будет заполнен именами пользователей из базы данных. Эта опция будет на каждой странице «Подробности», что означает, что пользователь будет назначен на текущую задачу, которую видит администратор.

От TasksController:

public async Task<IActionResult> Details(long? id)
{
        Assign model = new Assign();

        if (id == null)
        {
            return NotFound();
        }

        var task = await _context.Task
                                 .FirstOrDefaultAsync(m => m.TaskId == id);

        if (task == null)
        {
            return NotFound();
        }

        return View(task);
}

Назначить модель:

public partial class Assign
{
    public long AssignId { get; set; }
    public long TaskId { get; set; }
    public long Id { get; set; }
}

Модель задачи:

public partial class Task
{
    [Key]
    public long TaskId { get; set; }
    public string Category { get; set; }
    public string Description { get; set; }

    [DataType(DataType.Date)]
    public DateTime DateCreated { get; set; }

    [DataType(DataType.Date)]
    public DateTime? DueDate { get; set; }
    public string Status { get; set; }
    public string Comments { get; set; }
}

Details.cs html

@model TaskManager2.Models.Task


@{
    ViewData["Title"] = "Details";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Details</h1>

<div>
    <h4>Task</h4>
    <hr />
    <dl class="row">
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Category)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Category)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Description)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Description)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.DateCreated)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.DateCreated)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.DueDate)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.DueDate)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Status)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Status)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Comments)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Comments)
        </dd>
    </dl>
</div>
<div>
    <a asp-action="Edit" asp-route-id="@Model.TaskId">Edit</a> |
    <a asp-action="Index">Back to List</a> |
    <a asp-action="Assign" asp-controller="Admin">Assign</a> 
</div>

Назначение здесь переводит вас на другую страницу, но это не обязательно должно быть так. Это просто что-то, что я попробовал и не сработало.

Идея:

here's the idea

Пожалуйста, дайте мне знать, если есть другую часть программы вам нужно увидеть. Я открыт для предложений.

...