Я столкнулся с проблемой работы с проектом asp .net mvc.
У меня есть страница генератора рецептов, которая отображает названия рецептов, ингредиенты и инструкции в таблице с использованием HTML.
Я извлекаю информацию о рецептах из своей базы данных, и в моей базе данных каждый рецепт содержит несколько ингредиентов, которые идут вместе с ним.
Задача для меня - получить название рецепта, соответствующие ингредиенты и инструкции в одной строке таблицы html. Проблема, которую я пытался обойти, состоит в том, что она будет отображать несколько строк для одного и того же рецепта, потому что ингредиенты перечислены несколько раз, поэтому я попытался сделать так, чтобы к модели был добавлен список ингредиентов для каждого рецепта, но не работает очень хорошо.
Я покажу свой код для Модели, Представления и Контроллера, которые у меня сейчас есть, в надежде, что кто-то сможет настроить мои методы и указать мне правильное направление.
Модель:
using System;
using System.Collections.Generic;
using System.Web.Mvc;
namespace MyPantry.Models
{
public class Recipes
{
public int ID { get; set; }
public string Name { get; set; }
public List<string> IngredientName { get; set; }
public string Instructions { get; set; }
}
}
Просмотр:
<h1 class="m-b-20" style="font-size: 4vw; margin-top: 10px; margin-left: 37%; margin-right: 41.5%; border-style: solid">My Recipes</h1>
<form method="post">
<div>
@model List<Recipes>
<table class="table table-bordered table-responsive table- hover">
<tr>
<th>Name</th>
<th>Ingredients</th>
<th>Instructions</th>
</tr>
@foreach (var recipe in Model)
{
<tr>
<td>@recipe.Name</td>
<td>@Html.DisplayFor(model => recipe.IngredientName)</td>
<td>@recipe.Instructions</td>
</tr>
}
</table>
</div>
</form>
Контроллер:
public IActionResult RecipeList()
{
var ls = new List<Recipes>();
SqlConnection connection = GetConnection();
try
{
using (connection)
{
connection.Open();
StringBuilder sb = new StringBuilder();
sb.Append("SELECT ingredients.name as IngName, recipes.name, recipes.instructions ");
sb.Append("FROM recipes, recipe_ingredients, ingredients ");
sb.Append("WHERE recipes.id = recipe_ingredients.recipe_id and recipe_ingredients.Ingredient_id = ingredients.id;");
String sql = sb.ToString();
using (SqlCommand command = new SqlCommand(sql, connection))
{
using (SqlDataReader rdr = command.ExecuteReader())
{
while (rdr.Read())
{
var recipe = new Recipes();
recipe.Name = rdr["name"].ToString();
recipe.Instructions = rdr["instructions"].ToString();
recipe.IngredientName.Add(Convert.ToString(rdr["IngName"]));
ls.Add(recipe);
}
}
}
}
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
}
return View(ls);
}