【发布时间】:2021-12-27 04:05:37
【问题描述】:
我正在尝试获取类别列表,并与该列表一起显示与类别匹配的记录数或计数。我在控制器中有 Json。在我刚刚返回带有foreach 的类别列表之前。但现在想显示计数也。我创建了一个 SQL 视图并将类别与帖子联系起来,这就是我的 ViewModel 中的内容
public class PostsInCategories
{
public int Id { get; set; }
public string Name { get; set; }
public string UrlSlug { get; set; }
}
然后在需要清理的Controller中,加上UrlSlug:
public ActionResult Category()
{
//List<CategoryViewModel> Category = new List<CategoryViewModel>();
//Category = db.Categories.Where(k => k.IsDelete != true).OrderByDescending(a => a.CreatedDate).ToList().Select(a => a.ToCategoryModel()).ToList();
var model = (from c in db.PostsInCategories
group c by c.Name into g
orderby g.Count() descending
select new
{
Cat = g.Key,
CountPosts = g.Count()
}).ToList();
//return PartialView(@"~/Views/Blog/Partials/Category.cshtml", Category);
return Json(new { result = model }, JsonRequestBehavior.AllowGet);
}
而我的视图需要有这种样式,并转换为json字符串除外:
@model IEnumerable<MyProject.Models.CategoryViewModel>
<ul class="list list-border angle-double-right">
@foreach (var item in Model)
{
<li>
<a href="/Blog/Category/@item.UrlSlug/@item.Id">
@Html.DisplayFor(modelItem => item.Name)
<span>(19)</span>
</a>
</li>
}
</ul>
我的问题是如何在视图中显示列表以及如何将 UrlSlug 添加到字符串中。 UrlSlug 用于类别。
感谢您的帮助!
更新:按要求 - Sql 视图脚本
SELECT dbo.Category.Name, dbo.Post.Id, dbo.Post.UrlSlug
FROM dbo.Category LEFT OUTER JOIN
dbo.Post ON dbo.Category.Id = dbo.Post.CategoryId
更新:当前脚本也可以按我的意愿工作。在下面的答案的帮助下。
视图模型
public class CategoryListViewModel
{
public int Id { get; set; }
public string Category { get; set; }
public string UrlSlug { get; set; }
public int CountPosts { get; set; }
public int PostId { get; set; }
}
控制器 我必须添加 PostId,因为我的列表返回所有类别并计算它们,即使它们可能没有与之关联的帖子。 查看部分视图。 如果该类别没有帖子,我的 SqlView 返回 Null,因此我将其更正为显示 0 See Sql View。
public ActionResult Category()
{
var model = (from c in db.PostsInCategories
group c by c.Name into g
orderby g.Count() descending
select new CategoryListViewModel
{
Category = g.Key,
Id = g.FirstOrDefault().Id,
UrlSlug = g.FirstOrDefault().UrlSlug,
PostId = g.FirstOrDefault().PostId,
CountPosts = g.Count()
}).ToList();
return View(model);
}
部分视图
<ul class="list list-border angle-double-right">
@foreach (var item in Model)
{
<li>
<a title="@item.Category Posts" href="/Blog/Category/@item.UrlSlug/@item.Id">
@Html.DisplayFor(modelItem => item.Category)
</a>
<span title="Number of Posts">( @if (item.PostId != 0)
{ @item.CountPosts }
else
{ <text>0</text>} )</span>
</li>
}
</ul>
SqlView
SELECT dbo.Category.Id, dbo.Category.Name, dbo.Category.UrlSlug, ISNULL(dbo.Post.Id, 0) AS PostId
FROM dbo.Category LEFT OUTER JOIN
dbo.Post ON dbo.Category.Id = dbo.Post.CategoryId
【问题讨论】:
标签: c# jquery sql json asp.net-mvc