Sql 将不同的数据返回到不同的视图部分

Sql 将不同的数据返回到不同的视图部分,sql,asp.net-mvc,entity-framework,Sql,Asp.net Mvc,Entity Framework,我有一个“最受欢迎”的div,显示当前最受欢迎的拍卖项目,还有一个“即将结束”的div,我想显示即将结束的拍卖。我已经成功地查询了数据库中的“最流行”并将这些结果返回到页面。我知道对于那些即将结束的查询是什么,但是如何将这两组数据返回到页面,以便部分视图“_AuctionTile”使用呢 以下更新反映了Vinutha N提出的建议-- 景色 @model IEnumerable<MyAuctionApp.Models.Auction> @{ ViewBag.Title = "Hom

我有一个“最受欢迎”的div,显示当前最受欢迎的拍卖项目,还有一个“即将结束”的div,我想显示即将结束的拍卖。我已经成功地查询了数据库中的“最流行”并将这些结果返回到页面。我知道对于那些即将结束的查询是什么,但是如何将这两组数据返回到页面,以便部分视图“_AuctionTile”使用呢

以下更新反映了Vinutha N提出的建议--

景色

@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>
然而,正如您从所附的截图中所看到的,“大多数流行元素” 未拾取在AuctionViewModel中初始化的属性 由Intellisense升级为现有,在线路中

    @foreach (var item in Model.mostPopularItems)
我还有什么不太对的

谢谢,
CM

在模型中声明2列表并将数据分配给列表。在html页面中,使用foreach中的特定列表属性。 像

模型。大众化
Model.Endingitems使用子操作。首先,在您的
AuctionController
上创建如下操作:

[ChildActionOnly]
public ActionResult MostPopular()
{
    // get most popular auctions
    return PartialView("_AuctionTile", auctions);
}

[ChildActionOnly]
public ActionResult EndingSoon()
{
    // get auctions ending soon
    return PartialView("_AuctionTile", auctions);
}
然后,在您的视图中,您希望每个视图都显示:

@Html.Action("MostPopular")
@Html.Action("EndingSoon")
主视图的模型应该只关注它需要做什么,而不是像这样的旁白

更新

对不起,我没有注意到你的HTML。基本上,您需要为每个部分创建一个分部。例如:

\u MostPopular.cshtml

@model IEnumerable<Auction>
<div id="popular" class="col-md-4 col-lg-4">
    <h2>Most Popular Items</h2>
    @foreach (var item in Model)
    {
        @Html.Partial("_AuctionTile", item)
    }  
</div> 
这里的关键是子操作创建了一个单独的上下文,您可以在其中专门为这个局部视图构建一个视图模型,而不会影响主视图中的情况

奖金

显示模板在这方面也有很大帮助。例如,如果您可以创建一个视图,如
Views\Shared\DisplayTemplates\Auction.cshtml
。然后,每当您使用
拍卖
实例调用
Html.DisplayFor
时,它都会自动使用该视图进行渲染。此外,
Html.DisplayFor
还可以处理可枚举项。它将简单地使用包含类型的显示模板来呈现列表中的每个项目。因此,在您的代码中,您可以简单地执行以下操作,而不是迭代
Model
中的项目并为每个项目呈现局部视图:

@model IEnumerable<Auction>
<div id="popular" class="col-md-4 col-lg-4">
    <h2>Most Popular Items</h2>
    @Html.DisplayForModel()
</div> 
@model IEnumerable
最受欢迎的商品
@Html.DisplayForModel()

按照上面的建议创建视图模型,或者您可以在视图包中传递额外的数据,就像在控制器中一样 ViewBag.endingSoon=您的收藏 在你的视野中使用它
希望对你有所帮助。首先,你需要申报两份清单, 在您正在使用的视图模型中列出Popularitem和list endingSoon(如果没有,则创建并使用它是一种最佳做法,因为您无法在控制器中执行此操作)

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
命名空间DataViewModel.ViewModels
{
公共类DataViewModel
{

public list

创建一个具有两个属性的视图模型—
IEnumerable-MostPopular
IEnumerable-EndingSoon
以及视图中的
@foreach(model.MostPopular中的变量项){…
etcDo如果可以的话,你介意花一分钟详细阐述一下这个解决方案吗?我喜欢它,因为如果它起作用的话,我所要做的就是添加“Model.MostPopular”或“Model.EndingSoon”来引用我需要的数据。我对这个过程不熟悉,不能完全想象它如何与视图模型方法一起工作。我是否创建单独的文档t这称为“AuctionViewModel”,如果是这样,我是否在其中指定最流行和最快结束的查询?使用这两个属性创建一个
AuctionViewModel
(在一个单独的
ViewModels
文件夹中)。在GET方法中,初始化它并用查询填充它-
var model=new AuctionViewModel(){MostPopular=db.Auctions.Where(…),EndingSoon=db.Auctions.Where(…)};返回视图(model);
和视图中的
@model yoursassembly.AuctionViewModel
(控制器负责获取和填充数据,而不是视图模型)@Stephen你能看一下我的最新问题吗?谢谢。如果可以的话,你能详细说明一下@Html.Action(“MostPopular”)和@Html.Action(“EndingSoon”)助手的位置吗?下面的div与你的解决方案会是什么样的?拍卖即将在@foreach结束(模型中的变量项){@Html.Partial(“\u AuctionTile”,item)}你能看看我最新的问题吗?如果你能看到我使用的方法有什么不太正确的地方,那是Vinutha N建议的。谢谢。对不起,我不太明白你所说的声明“2个列表”是什么意思。你是说声明两个列表?还是说声明一个ToList()功能?抱歉,我正在使用手机回答ans问题,因此写起来有点困难。创建两个列表当你有时间坐在笔记本电脑或其他东西前时,你介意写下你的想法吗?我不太清楚我很抱歉我不熟悉这个过程。谢谢。谢谢。如果对我有效,我会尝试并报告。我应用程序感谢您的帮助。@Vinutha--请查看我上面编辑的问题。谢谢。@ChrisMazzochi,您必须在视图中使用MyProject.Web.ViewModels.DataViewModel,然后只有您才能访问该属性,并且您还没有将视图模型内容包含在问题中,因此,我也编辑了视图模型部分。请看一看。您可以上厕所吗k在我更新的问题上,如果你能看到我使用的方法有什么不太正确的地方,这是Vinutha N.建议的。谢谢。
@model IEnumerable<Auction>
<div id="popular" class="col-md-4 col-lg-4">
    <h2>Most Popular Items</h2>
    @foreach (var item in Model)
    {
        @Html.Partial("_AuctionTile", item)
    }  
</div> 
return PartialView("_MostPopular", auctions);
@model IEnumerable<Auction>
<div id="popular" class="col-md-4 col-lg-4">
    <h2>Most Popular Items</h2>
    @Html.DisplayForModel()
</div> 
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace DataViewModel.ViewModels
    {
        public class DataViewModel
{
    public list<Auctions> Popularitem { get; set; }
    public list<Auctions> endingSoon { get; set; }
    public CustomerViewModel((datatype)db)
    {
        list<Auctions> Popularitem=db.Auctions.Where(x => x.EndTime > DateTime.Today).OrderByDescending(x => x.viewCount);

    list<Auctions> endingSoon =db.Auctions.Where(x => x.EndTime > DateTime.Today).OrderByDescending(x => x.viewCount);
    }
}
}

in controller 
public ActionResult Index()
    {
        var db = new AuctionsDataContext();
        datamoduleobject= new Dataviewmodel(db);
        return View(datamoduleobject);
    }

in view :
@MyProject.Web.ViewModels.DataViewModel
<div id="popular" class="col-md-4 col-lg-4">
        <h2>Most Popular Items</h2>
        @foreach (var item in Model.Popularitem)
        {
            @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.endingSoon)
        {
           @Html.Partial("_AuctionTile", item)
        }
 </div>