PDA

View Full Version : سوال: نمایش اطلاعات جداول دیتابیس به صورت مجزا



mohammad.esi
جمعه 11 تیر 1395, 16:02 عصر
دوستان میخوام اطلاعات هر جدول دیتابیس رو به صورت جداگانه توی ویو index نمایش بدم. مثلا میخوام توی یه قسمت صفحه اخرین موبایل های اضافه شده ، توی یه قسمت پرفروش ترین ها و توی یه قسمت دیگه پر طرفدارترین گوشی ها رو نمایش بدم اما فقط با view model تونستم یکی شو پیاده سازی کنم .لطفا اگه روشی استفاده کردین راهنمایی کنید.

piter11
جمعه 11 تیر 1395, 16:10 عصر
شما باید از سکشن ها استفاده کنی دوست عزیز
هر تیکه ای که میخوای رو تو تابع action تعریف میکنی جداگانه و تو قالب سایت و همون صفحه مورد نظر جاسازیش میکنی
در مورد SECTION تو تالار و نت سرچ بزن زیاد مثال موفق باشی

mohammad.esi
جمعه 11 تیر 1395, 17:08 عصر
میخوام هر سه تاشون توی یک ویو باشند

parsdarab
جمعه 11 تیر 1395, 17:35 عصر
شما می تونید از view model استفاده کنید به صورت زیر

که هر پروپرتی خوش یه لیست باشه بعدشم foreach بزنید روی لیست ها

مانند پروپرتی Children

public class BaseBlogComment : BaseComment
{

[Display(Name = "پاسخ به نظر")]
public virtual int? ReplyId { get; set; }

public virtual BaseBlogComment Reply { get; set; }

public virtual ICollection<BaseBlogComment> Children { get; set; }

public virtual BaseContent BaseContent { get; set; }


public virtual int BaseContentId { get; set; }

}

mohammad.esi
جمعه 11 تیر 1395, 17:55 عصر
خب فقط یه ویو مدل میشه تعریف کرد توی هر ویو !برای این چه راه حلی دارید

hakim22
جمعه 11 تیر 1395, 18:30 عصر
شما می توانید در هر ویو از چند PartialView استفاده کنید. هرPartialView هم میتونه مدل خودش رو داشته باشه. هیچ محدودیت در نمایش چند مدل در یک ویو وجود نداره.

mohammad.esi
شنبه 12 تیر 1395, 00:06 صبح
انطوری نوشتم مشکل چیه؟؟؟
ویو :

@foreach (var item in @html.Action("databaseResult","home"))
{

}
public PartialViewResult databaseResult()
{
var data = db.Estates.ToList();
return PartialView("index",data);
}

parsdarab
شنبه 12 تیر 1395, 00:16 صبح
هر جور راحتی اما این روش بهینه ای نیست
تعداد بار مراجعه به دیتابیس زیاد میشه وسرباز اضافی تولید میشه

mohammad.esi
شنبه 12 تیر 1395, 00:44 صبح
ممنون میشم راهنمایی کنید

faranakk
یک شنبه 13 تیر 1395, 13:51 عصر
سلام
اقای حکیم بهترن روش رو گفتن
شما بای از پارشیال ویو استفاده کنی
به این شکل
شما در ویویی که میخوای به عنوان صفحه اصلی باشه و هر قسمتش یه اطلاعات خاصی رو نشون بدی و در جای مورد نظرت اینو قرار میدی
@Html.Action("yourAction", "YourController")
حالا میری داخل اون کنترلر و کدی که میخواهی رو مینویسی مثلا





public PartialViewResult YourAction()
{

return PartialView(db.tbl_test.OrderByDescending(x=>x....).Take(10));
}

, و در نهایت یه ویو میسازی و هر چی که خواستی رو توش نشون میدی


موفق باشین

parsdarab
یک شنبه 13 تیر 1395, 21:05 عصر
انطوری نوشتم مشکل چیه؟؟؟
ویو :

@foreach (var item in @html.Action("databaseResult","home"))
{

}
public PartialViewResult databaseResult()
{
var data = db.Estates.ToList();
return PartialView("index",data);
}


نکته اول اینکه شما امدی داخل حلقه for each اکشن کال کردی که این اشتباهه

parsdarab
یک شنبه 13 تیر 1395, 21:17 عصر
نکته دوم به ازای هر اکشنی که کال می کنی یک request میره سمت سرور.
مثلا برای ساخت یک ویو index که ممکنه شامل آخرین اخبار و جدیدترین محصولات و پرفروش ترین محصولات باشه اگه بخاید از @html.action استفاده کنید برای این ویو index سه request میره سمت سرور

@html.action("news")
@html.action("product")
@html.action("saler")

شما می تونید یه request بفرستید سمت سرور و تمام اطلاعات که می خواهید را بگیرد و بعد به ویو بفرستید





141242


اگر View والد، دارای کلیه اطلاعات لازم جهت نمایش اطلاعات Partial view است، از RenderPartial استفاده کنید. به این ترتیب برخلاف حالت RenderAction درخواست جدیدی به ASP.NET Pipeline صادر نشده و کارآیی نهایی بهتر خواهد بود. صرفا یک الحاق ساده به صفحه انجام خواهد شد.

از اطلاعاتی که اکشن index فرستادن می تونید اون اطلاعات رو به ویو بفرستید




@Html.Partial("PostComments", (List<DataAccess.BaseBlogComment>)Model.Comments.ToList())


اگر از الگو context per request استفاده نکرده باشید در هر اکشن ممکنه با هم به ازای هر لیستی که از context میگیرید یک کانکشن باز و بسته یشه
اگر هم استفاده کرده باشید به ازای هر اکشن یک کانکشن باز میشه و به ازای هر لیست از context یه request میره سمت دیتابیس

در ضمن شما برای اینکه تعداد request هایی که سمت بانک اطلاعاتی میره کم کنید مثلا می خواهید از جدول اخبار و محصولات و فروش select بزنی می تونی با یکبار رفتن به سمت دیتابیس تمام درخواست ها رو بگیری