文章/新闻按订单ID排序

时间:2012-12-06 19:37:13

标签: c# asp.net-mvc asp.net-mvc-3 entity-framework

我遇到一个架构来订购和更改文章/新闻管理系统中的订单时遇到了一些麻烦。

这里是: 我有新闻对象模型如下:

 class News {
   int id;
   string Title;
   string Content;
   string OrderId;
   // trimmed
 }

我有对象模型的CRUD。并列出如下:

Id Title Order
1. Foo    -+
2. Bar    -+
3. Glah   -+

我想要做的是当用户点击时 - 对于第一个新闻,我想要替换1和2 orderid,当然还要显示。

那么我如何在服务器端执行此操作?让我们说1.项目订单ID是1,我如何找到第一个具有更高订单ID的项目呢?

或者拿2. Bar,当我点击 - 时,我如何找到/替换第一个订单ID。或者我点击+如何用3. Glah替换此新闻的订单ID?

有更好的方法吗?

还有一些用户拖放的UI?有什么指针吗?

2 个答案:

答案 0 :(得分:1)

当用户更改项目的位置时,服务器需要知道哪个项目已更改以及它的新位置是什么。在下面的代码中,我使用List来找出新的位置。在此示例代码中,newPosition是新的从零开始的位置,selectedArticle是已移动的文章。

List<Article> articles = LoadSortedArticles()
articles.Remove(selectedArticle);
articles.Insert(newPosition, selectedArticle);
UpdateArticles(articles);

运行后,列表中的文章索引会告诉您新的位置。这适用于列表中的所有文章,并且对于拖放UI也是如此。我不知道实体框架,但是如果你可以将数据库中的orderId字段映射到列表中文章的索引,那么你应该好好去。

我希望这至少能够给你一些想法。也许其他人可以提供特定于实体框架的解决方案,但我认为将文章放入排序列表并让列表完成工作可能是最简单的方法。

答案 1 :(得分:1)

我认为这里最好的方法是实现一个Swap方法,它接受两个News个对象并交换它们的OrderId,我假设它是数字。

所以我的想法是你将这个方法传递给被点击的对象,以及上面的那个(如果用户点击+)或下面的那个(如果他们点击{{1 }})。如果你这样做,那么你就可以避免尝试找到下一个或上一个项目的任务。

在拖放的情况下,任务有点不同。您首先需要检索被拖动项目(和包括)之间的所有项目,以及-排序的放置目标。从那里你将拖动的项目与下一个或上一个项目交换(取决于方向),并继续这样做,直到你用掉落目标交换它。