PDA

View Full Version : سوال: استفاده از product card و فراخوانی اطلاعات از دیتابیس در MVC ؟



ghasem110deh
شنبه 30 دی 1396, 19:09 عصر
سلام به همه ...
دوستان من یه پروداکت کارت طراحی کردم ، که طالاعات مثل عکس و نام و قیمت و ... از دیتابیس خونده میشه و نمایش داده میشه ! (البته توی یک کارت)
حالا سوالم اینه که توی asp MVC چطور به تعداد سطر های دیتابیس میشه این کارت رو روی صفحه تکرار کرد ؟ والبته دارای صفحه بندی هم باشه ! (یا قابلیت لود بیشتر)

توی سی شارپ و برنامه ویندوزی که همه چیز رو میریختیم توی گرید :لبخند:
توی اندروید از آداپتر و مدل استفاده میشد ... اما توی MVC یکم گیج کننده است ... اگه کسی اینکار رو انجام داده یا اموزش خوب سراغ داره لطفا راهنمایی بفرمایید

تشکر

ghasem110deh
شنبه 30 دی 1396, 19:11 عصر
ببخشید ... با تاپیک asp MVC اشتباه گرفتم (اونم همزمان باز بود)
مدیران عزیز اگه ممکنه پست رو منتقل کنید

سعید کشاورز
دوشنبه 02 بهمن 1396, 09:46 صبح
تاپیک منتقل شد

ghasem110deh
دوشنبه 02 بهمن 1396, 20:43 عصر
با تشکر از آقای کشاورز عزیز :-)

nunegandom
چهارشنبه 04 بهمن 1396, 21:09 عصر
با سلام
برای قسمت صفحه بندی میتونید از این استفاده کنید:

namespace Helper.Paging
{
public class PagingInfo
{
public int TotalItems { get; set; }
public int ItemsPerPage { get; set; }
public int CurrentPage { get; set; }
public int TotalPages
{
get
{
return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage);
}
}
}
public static class PagingHelpers
{
public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int,string> pageUrl)
{
var result = new StringBuilder();
for (int i = 1; i <= pagingInfo.TotalPages; i++)
{


var anchor = new TagBuilder("a");
anchor.MergeAttribute("href", pageUrl(i));
anchor.InnerHtml = i.ToString();
if (i == pagingInfo.CurrentPage)
{
anchor.AddCssClass("active");
}
var icon = "<i>___</i>";
anchor.InnerHtml = icon;
result.Append(anchor.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
}
}

یک کنترلر احتیاج دارید که صفحه رو بتونه به صورت Get هم بگیره یا اصلا کاربر بدون صفحه میخواد ببینتش:
دوتا متد هم اضافه که ببینه صفحه قبلی موجود هست یا خیر و صفحه بعدی موجود هست یا خیر که دکمه نمایش بده کاربر بزنه بره صفحه بعدی یا قبلی

private GalleryVM GetModule(int? page)
{
var model = new GalleryVM();


var items = _Products.Skip((page.GetValueOrDefault() - 1) * PageSize).Take(PageSize);
model.Products = ConvertToVM(items);
model.PagingInfo = new PagingInfo
{
CurrentPage = page.GetValueOrDefault(),
ItemsPerPage = PageSize,
TotalItems = ProductCount
};
if (HaveNextPage(model.PagingInfo.CurrentPage,model.P agingInfo.TotalPages))
{
if (page<1)
{
page = 1;
}
model.next_page = page + 1;
}
if (HavePrevPage(model.PagingInfo.CurrentPage, model.PagingInfo.TotalPages))
{
model.prev_page = page.GetValueOrDefault() - 1;
}
return model;
}
private bool HavePrevPage(int current,int totalPage)
{
if (current>1)
{
return true;
}
return false;
}
private bool HaveNextPage(int current, int totalPage)
{
if (current<totalPage)
{
return true;
}
return false;
}



یک View هم احتیاج دارید به یک همچین صورتی

@model DomainModel.DashboardVM.GalleryVM
<div id="dvCarpets">
@foreach (var item in Model.Products)
{
<div class="col-sm-4">
<div class="col-xs-4 col-sm-6 nopadding carpet-leftside">
<a href="@Url.Action("Index","Single",new { url = item.Link })" aria-label="@item.CarpetID">
<picture>
<source class="img-gallery" srcset="@Url.Content(item.ImageWebpSmall)" type="image/webp" alt="@item.Alt" />
<img class="img-gallery" src="@Url.Content(item.ImageJPGSmall)" alt="@item.Alt">
</picture>
</a>
<p class="golden table specification-padding">
ID :
<span class="white cell">@item.CarpetID</span>
<a class="cell" href="@Url.Action("Index","Single",new { url = item.Link })">Carpet Spec</a>
</p>
</div>
<div class="col-sm-6 hidden-xs hidden-sm nopadding gallery-detail-side">
<article class="gallery gallery-font">
<ul>
<li>Size: @item.SizeX X @item.SizeY CM</li>
<li>Materials: @item.Silk% Silk &amp; @item.Wool% Wool</li>
</ul>
</article>
</div>
</div>
}
</div>
@if (Model.prev_page >= 1)
{
<a href="@Url.Action("Index",new { page = Model.prev_page })" aria-label="Previous" class="prevBig" id="prev"><svg class="social-icon">
<use xlink:href="@Url.Content("~/Content/sprite.svg")#arrow-left"></use>
</svg></a>
}
@if (Model.next_page != null)
{
<a href="@Url.Action("Index",new { page = Model.next_page })" aria-label="Next" class="nextBig" id="next"><svg class="social-icon">
<use xlink:href="@Url.Content("~/Content/sprite.svg")#arrow-right"></use>
</svg></a>
}
<a id="view_carousel" aria-label="Carousel View Mode" class="dw-right" href="javascript:void(0);">
<svg class="social-icon">
<use xlink:href="@Url.Content("~/Content/sprite.svg")#view-carousel"></use>
</svg>
</a>
<div class="LinkBuilding">
@Html.PageLinks(Model.PagingInfo, xc => Url.Action("Index", new { page = xc }))
</div>

صفحه بندی اون پایین میوفته

ghasem110deh
پنج شنبه 05 بهمن 1396, 17:58 عصر
آقای nunegandom (http://barnamenevis.org/member.php?194035-nunegandom) تشکر :لبخندساده:
البته هنوز قالب سایت رو تموم نکردم (چون تازه کارم) ... ولی امنحان میکنم و اگه مشکلی بود همینجا مطرح میکنم !

بازم تشکر

general67
سه شنبه 10 بهمن 1396, 03:07 صبح
میتونی از روش های متفاوتی استفاده کنی.حتی از خود sql هم میتونی اسفاده کنی .
اما یه روش جالب که خود میکروسافت ارایه داده:
https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application

این کار هم ساده و هم سریع هستش.