я не могу применить мой оператор LINQ SYNTAX к моему представлению MVC - PullRequest
0 голосов
/ 23 сентября 2018

Прежде всего я использую Entity Framework и mvc5. У меня есть таблица категорий и таблица подкатегорий, я сделал внешний ключ categoryid в таблице подкатегорий, и я пытаюсь составить запрос, который сравнивает categoryid в таблице подкатегорий сcategoryid в таблице категорий и поместите его в код, который, когда я нажимаю на категорию, я получаю подкатегории, которые имеют тот же самый идентификатор категории.

Вот таблицы в первую очередь:

public class Category
    {
        public Category()
        {
            SubCats = new HashSet<SubCat>();
        }

        public int Id { get; set; }
        public string Description { get; set; }

        [ForeignKey("SubCats")]
        public int? SubCatId { get; set; }
        public ICollection<SubCat> SubCats { get; set; }
    }



public class SubCat
    {
        public int Id { get; set; }
        public string Description { get; set; }

        [ForeignKey("Category")]
        public int CategoryId { get; set; }
        public Category Category { get; set; }
    }

Это код, который я написал в моем контроллере категорий:

public class CategoriesController : Controller
    {
        new ApplicationDbContext _context;

        public CategoriesController()
        {
            _context = new ApplicationDbContext();
        }

        // GET: Categories
        public ActionResult Index()
        {
            var category = _context.Categories.ToList();

            var cat = new CategoryViewModel
            {
                Categories = category
            };

            return View(cat);
        }

        public ActionResult Query()
        {
            var category = _context.Categories.ToList();
            var subcat = _context.SubCats.ToList();

            var cats = new CatSubCatViewModel
            {
                Categories = category,
                SubCats = subcat
            };

            return View(cats);
        }
    }

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

это представление индекса категорий:

@model Ebart.ViewModels.CategoryViewModel
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Categories</h1>

<br/>

<ul>
    @foreach (var category in Model.Categories)
    {
    <a href="http://localhost:51438/Categories/Query"><li>@category.Description</li></a>
    }
</ul>

Я хочу, чтобы при нажатии на li здесь перенаправить меня на подкадры, у которых есть свой идентификатор категории

И это представление запроса:

@model Ebart.ViewModels.CatSubCatViewModel
@{
    ViewBag.Title = "Query";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Sub-Categories</h2>


@{

    var query =
         from a in Model.Categories
         from b in Model.SubCats
         where b.CategoryId == a.Id
         select b;





}

<ul>
    @foreach (var c in query.Distinct())
    {
        <li>@c.Description</li>
    }
</ul>

Да ия сделал просмотр моделей, которые содержат списки категорий и подкатегорий:

public class CategoryViewModel
    {
        public IEnumerable<Category> Categories { get; set; }
    }



public class CatSubCatViewModel
    {
        public IEnumerable<Category> Categories { get; set; }
        public IEnumerable<SubCat> SubCats { get; set; }
    }

как проще всего это решить ??

1 Ответ

0 голосов
/ 25 сентября 2018

Попробуйте вместо <li>:

@Html.ActionLink(c.Description, "Query", "CategoriesController, new { id= item.id })

U должен переместиться query с View на Controller Я думаю.

И установить Query метод на:

    public ActionResult Query(id)
    {
        var cat = _context.Categories
             .Include(c=>c.Subcat)
             .FirstOrDefault(c=>c.Id == id)

        return View(cat);
    }

Теперь вы можете использовать i пункт назначения, например, @Html.DisplayFor(modelItem => item.Description)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...