【问题标题】:im not able to apply my LINQ SYNTAX statement to my MVC view我无法将我的 LINQ SYNTAX 语句应用于我的 MVC 视图
【发布时间】:2019-02-26 21:37:18
【问题描述】:

首先我使用实体框架和mvc5 我有一个类别表和一个子类别表,我在子类别表中创建了 categoryid 的外键,我试图编写一个查询,将子类别表中的 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);
        }
    }

我认为我应该将查询 actionresult 放在 subcat 控制器中!

这是类别索引视图:

@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 时将我重定向到具有其 categoryid 的子猫

这是查询的视图:

@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; }
    }

什么是最简单的解决方法??

【问题讨论】:

    标签: c# linq model-view-controller


    【解决方案1】:

    试试&lt;li&gt;:

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

    我认为你应该将 queryView 移动到 Controller

    并将Query方法设置为:

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

    现在您可以使用您的目标视图 f.e. @Html.DisplayFor(modelItem =&gt; item.Description)

    【讨论】:

    • 非常感谢,但我已经通过应用选择类别 ID 和描述的查询解决了这个问题,然后我通过 if 语句比较 subcat 表中的 categoryid。我认为您的解决方案比我的更专业,但我的更容易大声笑再次感谢您
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2021-11-25
    • 2017-09-16
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多