Bạn có thể thực hiện các nội dung khiêu dâm sau theo quan điểm của bạn:
@model IEnumerable<Foo>
<table>
@foreach (var item in from i in Model.Select((value, index) => new { value, index }) group i.value by i.index/3 into g select g)
{
<tr>
@foreach (var x in item)
{
<td><div class="productsFrame">@x.SomeProperty</div></td>
}
</tr>
}
</table>
hoặc đơn giản là sử dụng xem các mô hình và làm việc nhóm trong hành động điều khiển của bạn mà rõ ràng là những gì tôi muốn giới thiệu bạn. Thực tế duy nhất mà bạn cần thực hiện điều này có nghĩa là mô hình khung nhìn của bạn không phù hợp với các yêu cầu của khung nhìn của bạn, đó là kết quả nhóm theo 3. Vì vậy, điều chỉnh nó. Không vượt qua IEnumerable<Foo>
cho chế độ xem của bạn. Vượt qua IEnumerable<MyViewModel>
trong đó rõ ràng MyViewModel sẽ chứa nhóm cần thiết để trong quan điểm của bạn, bạn có thể chỉ đơn giản là vòng lặp hoặc vì tôi ghét viết và foreach vòng trong quan điểm chỉ đơn giản là sử dụng các mẫu hiển thị. Họ sẽ chăm sóc mọi thứ và quan điểm của bạn sẽ trông giống như thế này:
<table>
@HtmlDisplayForModel()
</table>
Có vẻ tốt hơn so với nội dung khiêu dâm ban đầu phải không?
Như được yêu cầu trong phần nhận xét dưới đây là cách tôi sẽ triển khai điều này bằng cách sử dụng các kiểu xem.
Vì luôn là trong ASP.ứng dụng NET MVC bạn bắt đầu bằng cách xác định mô hình điểm cho rằng sẽ phản ánh các yêu cầu của quan điểm của bạn (mà tôi lặp lại là: hiển thị một bảng với 3 cột):
public class ItemViewModel
{
public string Title { get; set; }
}
public class MyViewModel
{
public IEnumerable<ItemViewModel> Items { get; set; }
}
sau đó bạn chuyển sang bộ điều khiển sẽ điền và vượt qua mô hình điểm này để xem:
public class HomeController : Controller
{
public ActionResult Index()
{
// Obviously in a real world application the data is your domain model
// and comes from a repository or a service layer depending on the complexity
// of your application. I am hardcoding it here for the
// purposes of the demonstration
var data = Enumerable.Range(1, 30).Select(x => new { Title = "title " + x });
var model =
from i in data.Select((value, index) => new { value, index })
group i.value by i.index/3 into g
select new MyViewModel
{
Items = g.Select(x => new ItemViewModel { Title = x.Title })
};
return View(model);
}
}
và cuối cùng bạn viết quan điểm tương ứng (~/Views/Home/Index.cshtml
):
@model IEnumerable<MyViewModel>
<table>
@Html.DisplayForModel()
</table>
và ~/Views/Home/DisplateTemplates/MyViewModel.cshtml
trưng bày mẫu:
@model MyViewModel
<tr>
@Html.DisplayFor(x => x.Items)
</tr>
và cuối cùng là tương ứng với mẫu ~/Views/Home/DisplateTemplates/ItemViewModel.cshtml
display:
@model ItemViewModel
<td>@Html.DisplayFor(x => x.Title)</td>
và đó là khá nhiều đó. Đơn giản, sạch sẽ, tuân theo các thực hành và quy ước tốt.
Rõ ràng để mang lại điều này một bước xa hơn bạn sẽ giới thiệu AutoMapper để thực hiện việc lập bản đồ thực tế giữa các mô hình tên miền của bạn và xem mô hình và bạn sẽ kết thúc với một giải pháp rất thanh lịch mà sẽ trông như thế này:
public ActionResult Index()
{
IEnumerable<DomainModel> data = ...
var viewModel = Mapper.Map<IEnumerable<DomainModel>, IEnumerable<MyViewModel>>(data);
return View(viewModel);
}
hoặc một bước xa hơn:
[AutoMap(typeof(IEnumerable<DomainModel>), typeof(IEnumerable<MyViewModel>))]
public ActionResult Index()
{
IEnumerable<DomainModel> data = ...
return View(data);
}
Bây giờ chúng tôi đang bắt đầu kinh doanh nghiêm túc.
Câu hỏi này không thực sự có ý nghĩa đối với tôi. Nếu bạn có 3 mục trong đối tượng Model.ArticlesOnFirstSite thì đây chính là thứ bạn sẽ nhận được. –
Bạn muốn tổng số ba vòng, hoặc bạn muốn ba vòng cho mỗi articleOnFirstPage? – Maess
'Model.ArticlesOnFirstSite.Take (3)'? – asawyer