Задать вопрос

Как вывести список в представление по одному id?

у меня есть две таблицы. AT и ATD соединенные связью один ко многим.
по суть у меня есть один общий тест с характеристиками кто его делал и где(таблица АТ) и для несколько результатов (item) в таблице ATD.
я знаю как вывести детали, отредачить и удалить по ОДНОЙ строке.
например из контроллера:
public async Task<IActionResult> Details(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }
            var autoTestDetail = await _context.AutoTestDetails
                .Include(a => a.AutoTest)
             .FirstOrDefaultAsync(m => m.AutoTestId == id);
            if (autoTestDetail == null)
            {
                return NotFound();
            }

            return View(autoTestDetail);
        }


я хочу вывести список. то есть у меня есть условно ТЕСТ 1. я нажимаю на ссылку и меня перебрасывает на представление со списком foreach:
@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Time)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Level)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Category)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Message)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.AutoTest.AutoTestId)
            </td>
            <td>
                <a asp-action="Details" asp-route-id="@item.AutoTestDetailId">Details</a> 
            </td>
        </tr>


я пыталась сделать так:
public async Task<IActionResult> ListDetails(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var autoTestDetail = await _context.AutoTestDetails
               .Include(a => a.AutoTest)
            .FirstOrDefaultAsync(m => m.AutoTestId == id);

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

            var dataBaseContext = _context.AutoTestDetails
                .Include(a => a.AutoTest);
            return View(await dataBaseContext.ToListAsync());
        }


то есть мне нужно чтобы произошло сравнение по айди и вывелись все строки ATD у которыйх айди например 1( передается при нажатии)

по примеру собрать не получислось. ответ найти не могу

если что переход у меня по такой ссылке
<a asp-action="ListDetails" asp-controller="AutoTestDetails" asp-route-id="@Model.AutoTestId">список items</a> |

может в ней как то надо добавить чтобы было AutoTestDetailsId(первичный ключ таблицы ATD. при нажатии на кнопку должен выводиться такой список items из таблицы ATD чтобы первычный и внешний ключ AT были равны.

кнопка находится в представлении AT и я не знаю как ее изменить чтобы, если необходимо, получить AutoTestDetailsId. тк так я могу только из ATD

когда я перехожу к списку Тестов и нажимаю на детали одного из них у меня такой путь:
https://localhost:44329/AutoTests/Details/id
где id это тот самый AutoTestId.

потом я нажимаю на кнопку выше и получаю
https://localhost:44329/AutoTestDetails/ListDetails/3

но выводятся мне и по id=3 и по остальным
  • Вопрос задан
  • 44 просмотра
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Попробуйте юзнуть .Where при выборке, куда передать лямбду с логическим условием, что бы проверить каждый элемент по внешнему ключу, подходит он или нет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы