0

我正在使用 MVC + EF

我有一个 Feed xml 文件 url,每 7 分钟更新一次项目,每次添加新项目时,我都会将所有项目检索到列表变量中,然后将这些变量添加到我的数据库表中。之后,我从数据库表中填充了一个新的列表变量,它是我的 ViewModel。然后我在我的视图中声明 ViewModel,它是一个 .cshtml 文件,并循环遍历所有对象并显示它们。

我怎样才能确保最新的项目放在顶部而不是底部,并且数字以正确的顺序显示?

这就是我在我的 cshtml 中显示项目的方式,注意我使用了 ++number,所以最新的项目需要是 1,依此类推::

@model Project.Viewmodel.ItemViewModel
@{
    int number = 0;
 }
<div id="news-container">
@foreach (var item in Model.NewsList.OrderByDescending(n => n.PubDate))
{
    <div class="grid">
        <div class="number">
            <p class="number-data">@(++number)</p>
        </div>
        <p class="news-title">@(item.Title)</p>
        <div class="item-content">            
            <div class="imgholder">
                <img src="@item.Imageurl" />
                <p class="news-description">
                    @(item.Description) 
                    <br />@(item.PubDate) | 
                    <a href="@item.link">Source</a>
                </p>
            </div>
        </div>
    </div>                  
}
</div>

这就是我如何填充我在 .cshtml 文件中使用的视图模型来迭代并显示项目

private void FillProductToModel(ItemViewModel model, News news)
{
    var productViewModel = new NewsViewModel
    {
        Description = news.Description,
        NewsId = news.Id,
        Title = news.Title,
        link = news.Link,
        Imageurl = news.Image,
        PubDate = news.Date,
    };
    model.NewsList.Add(productViewModel);
}

如果您检查此图像,那是它与数字一起显示的方式,那是不正确的。

如果你看到箭头应该是这样的,我怎么能做到这一点?

在此处输入图像描述

任何形式的帮助表示赞赏:)

注意:当我删除.OrderByDescending时,每个网格上的数字都是正确的。但我需要.OrderByDescending因为我想要最新添加的项目在顶部。

4

5 回答 5

0

看着你的草图,我假设你有float: leftdisplay: inline-block正在grid上课。添加float: right可能会奏效。

如果那没有帮助,请发布您拥有的 CSS。

于 2013-05-06T08:50:42.713 回答
0

只是一个简短的词..

您正在将 NewsViewModel 传递给视图并在 ItemViewModel ..y 上执行迭代?你认为这可能是问题的原因..

问候

于 2013-05-06T12:40:09.907 回答
0

您可以使用CompareTo方法对新闻列表进行排序:

model.NewsList.Sort((a, b) => b.PubDate.Date.CompareTo(a.PubDate.Date));

正确排序列表后,您可以简单地使用 CSS 将新闻列表每行显示两个项目。看到这个小提琴

小提琴是在我之前问过的类似问题中提供给我的修订版。

于 2013-05-06T15:35:37.403 回答
0

试试这个:

@model Project.Viewmodel.ItemViewModel
@{
    int number = 0;
    var NewsItems=Model.NewsList.OrderByDescending(n => n.PubDate).ToList();
 }
<div id="news-container">
@foreach (var item in NewsItems)
{
    <div class="grid">
        <div class="number">
            <p class="number-data">@(++number)</p>
        </div>
        <p class="news-title">@(item.Title)</p>
        <div class="item-content">            
            <div class="imgholder">
                <img src="@item.Imageurl" />
                <p class="news-description">
                    @(item.Description) 
                    <br />@(item.PubDate) | 
                    <a href="@item.link">Source</a>
                </p>
            </div>
        </div>
    </div>                  
}
</div>
于 2013-05-07T16:18:28.643 回答
-1

试试这个

private void FillProductToModel(ItemViewModel model, News news)
{
var newList = list.OrderByDescending(x => x.News.Date).toList();
var productViewModel = new NewsViewModel
{
    Description = newList .Description,
    NewsId = newList .Id,
    Title = newList .Title,
    link = newList .Link,
    Imageurl = newList .Image,
    PubDate = newList .Date,
};
model.NewsList.Add(productViewModel);
于 2013-05-06T14:44:42.137 回答