C# 将多个查询结果返回到各个视图部分
我有两个女主角“最受欢迎”和“即将结束” 我想在我的数据库中显示最受欢迎的物品,这些物品的拍卖日期是“即将结束” 使用注释掉的代码,在C# 将多个查询结果返回到各个视图部分,c#,asp.net-mvc,database,C#,Asp.net Mvc,Database,我有两个女主角“最受欢迎”和“即将结束” 我想在我的数据库中显示最受欢迎的物品,这些物品的拍卖日期是“即将结束” 使用注释掉的代码,在Index()控制器中,在下面的代码中,我能够成功地查询数据库中的“最流行”项目,并将这些结果返回到页面。但是我正在尝试将这两组数据返回到页面——最流行的数据和即将结束的项目,以便部分视图\u AuctionTile使用 我对即将结束的项目进行了查询 下面的解决方案代表了一个解决方案路径,我已经设定了该路径,以实现能够返回两组数据——最常用的数据和即将结束的项目到
Index()
控制器中,在下面的代码中,我能够成功地查询数据库中的“最流行”项目,并将这些结果返回到页面。但是我正在尝试将这两组数据返回到页面——最流行的数据和即将结束的项目,以便部分视图\u AuctionTile使用
我对即将结束的项目进行了查询
下面的解决方案代表了一个解决方案路径,我已经设定了该路径,以实现能够返回两组数据——最常用的数据和即将结束的项目到视图。我想我有两个问题:
1) 为什么我不能这样做:
var db = new AuctionsDataContext();
var mostPopular = db.Auctions.Where(x => x.EndTime > DateTime.Today).OrderByDescending(x => x.viewCount).ToArray();
var endingSoon = db.Auctions.Where(x => x.EndTime > DateTime.Today).OrderByDescending(x => x.EndTime).ToArray();
return View(mostPopular, endingSoon);
2) 考虑到我在下面发布的解决方案路径,并在视图模型中创建两个列表结构,为什么Intellisense没有检测到属性mostpopulariems
,如屏幕截图所示
@foreach (var item in Model.mostPopularItems)
景色
@model IEnumerable<MyAuctionApp.Models.Auction>
@{
ViewBag.Title = "Home Page";
}
<div class="row">
<div id="popular" class="col-md-4 col-lg-4">
<h2>Most Popular Items</h2>
@foreach (var item in Model.mostPopularItems)
{
@Html.Partial("_AuctionTile", item)
}
</div>
<div id="ending" class="col-md-4 col-lg-4">
<h2>Auctions Ending Soon</h2>
@foreach (var item in Model)
{
@Html.Partial("_AuctionTile", item)
}
</div>
但是,正如您从所附的屏幕截图中看到的,mostPopularItems
未拾取在AuctionViewModel
中初始化的属性
由Intellisense升级为现有,在线路中
@foreach (var item in Model.mostPopularItems)
欢迎您的解决方案。但拜托,我对这个过程还不熟悉。所以假设我需要你为我解释一切 您可以看到属性
mostPopularItems
和endingSoon
,因为在视图模型中,您将它们定义为静态
。在您的视图中,您正在使用以下行:
@foreach (var item in Model.mostPopularItems)
这将不起作用,因为模型包含AuctionViewModel的实例,静态只能通过类本身而不是从实例进行访问
你需要重构你的代码。视图模型必须如下所示:
public class AuctionViewModel
{
public List<Auction> mostPopularItems {get; set; }
public List<Auction> endingSoon {get; set; }
public AuctionViewModel(AuctionsDataContext db)
{
mostPopularItems = db.Auctions.Where(x => x.EndTime > DateTime.Today).OrderByDescending(x => x.viewCount).ToList();
endingSoon = db.Auctions.Where(x => x.EndTime > DateTime.Today).OrderByDescending(x => x.EndTime).ToList();
}
}
}
因此,在重构之后,您的foreach代码将正常工作。您可以看到属性
mostPopularItems
和endingSoon
,因为在视图模型中,您将它们定义为static
。在您的视图中,您正在使用以下行:
@foreach (var item in Model.mostPopularItems)
这将不起作用,因为模型包含AuctionViewModel的实例,静态只能通过类本身而不是从实例进行访问
你需要重构你的代码。视图模型必须如下所示:
public class AuctionViewModel
{
public List<Auction> mostPopularItems {get; set; }
public List<Auction> endingSoon {get; set; }
public AuctionViewModel(AuctionsDataContext db)
{
mostPopularItems = db.Auctions.Where(x => x.EndTime > DateTime.Today).OrderByDescending(x => x.viewCount).ToList();
endingSoon = db.Auctions.Where(x => x.EndTime > DateTime.Today).OrderByDescending(x => x.EndTime).ToList();
}
}
}
因此,在重构之后,您的foreach代码将正常工作。谢谢。我现在比以往任何时候都更了解实例变量和静态变量之间的区别,因为它涉及到访问它们的属性。令人惊奇的东西。db上下文不应该出现在您的视图模型中——填充数据是控制器的责任(如果您正在编辑数据,这将永远不会起作用)@StephenMuecke。但在这里,他只是显示数据。对于架构问题,我看到了这一点。但是,因为提问者似乎是新手(他只是学习什么是静态成员和实例成员),我认为它将解决当前的问题。只要他继续编写代码,他就会发现问题,或者从某个地方了解到他没有遵循好的实践。我们都是从错误中学习的:-)谢谢。我现在比以往任何时候都更了解实例变量和静态变量之间的区别,因为它涉及到访问它们的属性。令人惊奇的东西。db上下文不应该出现在您的视图模型中——填充数据是控制器的责任(如果您正在编辑数据,这将永远不会起作用)@StephenMuecke。但在这里,他只是显示数据。对于架构问题,我看到了这一点。但是,因为提问者似乎是新手(他只是学习什么是静态成员和实例成员),我认为它将解决当前的问题。只要他继续编写代码,他就会发现问题,或者从某个地方了解到他没有遵循好的实践。我们都是从错误中学习的:-)
@model MyAuctionApp.ViewModels.AuctionViewModel