1

这似乎是一个基本问题,但是,我似乎无法弄清楚我做错了什么。我有一个“FavouritePost”列表,其中包含“FavId”、UserId 和一个 PostId。此类用于确定用户是否已将帖子添加到“收藏夹”列表中。在我的控制器中,我过滤掉帖子,只选择与当前 userId 匹配的帖子。在我看来,我有以下 foreach 循环:

@foreach (var fav in Model.FavPosts)
{
    if (post.PostId == fav.PostId)
    {
        <img src="@Url.Content("~/Content/images/favourite_img.jpg")" alt="" />
    }
    else if (post.PostId != fav.PostId)
    {
        <img src="@Url.Content("~/Content/images/Notfavourite_img.jpg")" alt="" />
    }
}

我的问题是:当 foreach 循环运行时,它会根据用户是否“喜欢”该帖子,在帖子旁边显示一张图片。但是,当我运行以下代码时,它会在帖子旁边分配多个图像。例如,根据下表数据:

FavId      UserId      PostId

  1          1           1
  2          1           2
  3          1           4

UserId = 1,已喜欢三个帖子 (1,2,4),但是,UserId = 1 尚未“喜欢”帖子 3

但是,当我运行我的页面时,对于第一篇文章,会显示 3 张图片。

Post 1 = "Liked Image", "Not Liked Image", "Not Liked Image"
Post 2 = "Not Liked Image", "Liked Image", "Not Liked Image"
Post 2 = "Not Liked Image", "Not Liked Image", "Liked Image"

它似乎迭代了三遍,并为帖子分配了三张图片,而不是一张图片。我意识到这是因为列表中的 UserId 数量,但是,我认为条件语句会阻止显示替代图像。为这个冗长的问题道歉,我只是认为这会让我更容易理解我的困境。任何帮助都会很棒。

4

2 回答 2

2

您应该按照以下方式做一些事情:

@if (Model.FavPosts.Any(x => x.PostId == post.PostId))
    // show favourite icon
else
    // show not favourite icon

或者,如果你的Post类上的相等是使用 , 定义的PostId,也许可以这样做(可以说)提高可读性:

@if (Model.FavPosts.Contains(post))
    // show favourite icon
else
    // show not favourite icon

您现在正在做的是检查每个帖子FavPost以查看它是否匹配,并每次输出信息。知道你真正的意思是不够聪明,它只是按照你说的去做。类似于以下代码如何编写 2 nopes 和 a yep:

int[] favorites = { 1, 2, 3 };
int thisOne = 3;
foreach (var fav in favorites)
{
   if (thisOne == fav)
   {
       Console.WriteLine("yep");
   }
   else if (thisOne != fav)
   {
       Console.WriteLine("nope");
   }
}
于 2013-05-07T18:43:37.007 回答
0

怎么样:

@if(Model.FavPosts.Where(f => post.PostId == f.PostId).Any())
{
     <img src="@Url.Content("~/Content/images/favourite_img.jpg")" alt="" />
}
else
{
     <img src="@Url.Content("~/Content/images/Notfavourite_img.jpg")" alt="" />
}

如果我对您的理解正确,您想检查帖子是否在 FavPost 列表中有条目。如果它有一个条目输出最喜欢的图像,而不是 Notfavourite 图像。

于 2013-05-07T18:40:53.563 回答