我有一个"最受欢迎" div目前正在展示最受欢迎的拍卖品以及即将结束的" Ending Soon" div,我想显示那些即将结束的拍卖。我已经成功查询了数据库中的" Most Popluar"并将这些结果返回到页面。而且我知道查询对于那些即将结束的人来说是什么,但是如何将两组数据都返回到页面以进行部分视图" _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>
ViewModel
using MyAuctionApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MyAuctionApp.ViewModels
{
public class AuctionViewModel
{
public static List<Auction> mostPopularItems;
public static List<Auction> endingSoon;
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();
}
}
}
控制器
using MyAuctionApp.Models;
using MyAuctionApp.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MyAuctionApp.Controllers
{
[AllowAnonymous]
public class HomeController : Controller
{
[AllowAnonymous]
public ActionResult Index()
{
var db = new AuctionsDataContext();
var dataModuleObject = new AuctionViewModel(db);
return View(dataModuleObject);
//var auctions = db.Auctions.ToArray();
//var auctions = db.Auctions.Where(x => x.EndTime >
//DateTime.Today).OrderByDescending(x => x.viewCount);
//return View(auctions);
}
}
正如您从附带的屏幕截图中看到的那样,&#39; mostPopularItems&#39; 在AuctionViewModel中初始化的属性未被选中 由Intellisense作为现有的,在行
@foreach (var item in Model.mostPopularItems)
我还有什么不对?
谢谢, CM
答案 0 :(得分:1)
使用子操作。首先,在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。基本上,您需要为每个部分创建一个部分,然后。例如:
<强> _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>
然后,更改子操作以返回此操作:
return PartialView("_MostPopular", auctions);
这里的关键是子操作创建了一个单独的上下文,您可以在其中专门为此局部视图构建视图模型,而不会影响主视图中的内容。
<强>奖金强>
显示模板在这里也可以提供很多帮助。例如,如果您可以创建类似Views\Shared\DisplayTemplates\Auction.cshtml
的视图。然后,只要您使用Html.DisplayFor
实例调用Auction
,它就会自动使用该视图进行渲染。此外,Html.DisplayFor
也可以处理可枚举。它将简单地使用包含类型的显示模板来呈现列表中的每个项目。因此,在您的代码中,您可以简单地执行以下操作,而不是遍历Model
中的项目并为每个项目呈现部分视图:
@model IEnumerable<Auction>
<div id="popular" class="col-md-4 col-lg-4">
<h2>Most Popular Items</h2>
@Html.DisplayForModel()
</div>
答案 1 :(得分:0)
在模型中声明2列表并将数据分配给列表。在html页面中使用foreach中的特定列表属性。 喜欢,
model.Popularitems Model.Endingitems
答案 2 :(得分:0)
如上所述创建视图模型,或者您可以在视图包中传递额外数据,就像您可以设置的控制器一样 ViewBag.endingSoon = yourCollection 并在您的视图中使用它 希望它会有所帮助
答案 3 :(得分:0)
首先你需要申报2个列表, 列出您正在使用的视图模型中的热门项目和列表结束(如果没有创建并使用它的最佳实践。因为您无法在控制器中执行)
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>
请浏览我提供的链接,以帮助您理解http://tutlane.com/tutorial/aspnet-mvc/how-to-use-viewmodel-in-asp-net-mvc-with-example