我知道伙计这个问题并不难,但我似乎无法弄清楚如何将orderby添加到我的控制器。对不起伙计我是菜鸟:(。这是我的情景。
我的视图中有一个标签列表。每当我选择一个标签时,会出现一个帖子列表,标签名相同。选择的标签。我的代码工作正常。只有当我选择一个标签时,它显示的列表按降序排列。最新的一个在底部。我希望它在顶部。:(
当前我的输出
3
2
1
我想要实现的目标
1
2
3
这是我的控制器。我似乎无法弄清楚如何在我的浏览中执行orderby的逻辑。
public ActionResult PostTags() // This is one is ok
{
IQueryable<Tag> tags = from tg in db.Tags
orderby tg.Name ascending
select tg;
return View(tags);
}
public ActionResult Browse(string tag) // This is where I can't seem to figure out how add orderby
{
var tagModel = db.Tags.Include("Posts").Single(ts => ts.Name == tag);
return View(tagModel);
}
提前感谢任何可以帮助我的人。
更新:这是我的帖子标记视图
@model IEnumerable<Blog.Models.Tag>
@{
ViewBag.Title = "PostTags";
}
<h3>Tags</h3>
@foreach (var item in Model)
{
<ul>
<li>
@Html.ActionLink(item.Name, "Browse", "Post",
new { Tag = item.Name }, null)
</li>
</ul>
}
//and this is my browse View
@model List<ProjectPAL.Models.Tag>
@foreach (var tag in Model.Posts)
{
<div><a href="@Href("~/Post/Details/" + tag.ID)">@tag.Title</a></div>
<a href="@Href("~/Post/Details/" + tag.ID + "#leavecomment")">Add a Comment</a>
}
答案 0 :(得分:4)
我猜你想要获得标签的帖子的集合。假设你有这样的实体
public class Post
{
public int ID { set; get; }
public string Title { set; get; }
public virtual ICollection<Tag> Tags { set; get; }
}
public class Tag
{
public int ID { set; get; }
public string Name { set; get; }
public virtual ICollection<Post> Posts { set; get; }
}
并且您已覆盖DBContext类的OnModelCreating
方法,以创建第三个表来存储PostId
和TagId
(假设它是多对多关系)< / p>
然后,您可以像下面一样更新您的操作方法代码,以获取具有与用户传递给操作方法的标签相同的帖子。您可以将OrderBy
方法添加到Where
方法的结果中。
public ActionResult Browser(string tag)
{
using (MyDBContext db = new MyDBContext())
{
var postsForTag = db.Posts
.Where(x => x.Tags.Any(o => o.Name == tag))
.OrderBy(y => y.ID).ToList();
// TO DO : Return the above collection / appropriate view model.
}
}
编辑:在您之前的评论中,您要显示标记的帖子列表,因此您应该更新视图,以便将其强烈输入到Post的集合中。
@model List<Blog.Models.Post>
<h2>Posts</h2>
@foreach(var item in Model)
{
<p>@item.Title</p>
}
答案 1 :(得分:2)
根据导航属性的设置方式,我会搜索帖子,而不是您搜索的方式:
var tagModel = db.Posts.Where(p => p.Tag.Name == tag).OrderBy(p => p.PostPropertyYouWantToOrder);
您正在做的是让语句检索包含帖子的所有标签,然后缩小范围。走最小阻力的道路。
答案 2 :(得分:0)
当你将tagModel返回给视图时,我想你通过foreach循环渲染帖子,如下所示:
@foreach(var post in Model.Posts)
{
//your html
}
如果我是对的,你可以按照自己的意愿订购帖子:
@foreach(var postin Model.Posts.OrderByDescending(p => p.PostID))
{
//your html
}