View Full Version : مبتدی: مشکل در لود کردن یک لیست بازگشتی بر اساس parentID در MVC
angel5980
سه شنبه 29 مرداد 1392, 14:18 عصر
سلام
من یه جدول دارم که به خودش بر میگرده بر اساس پرنت آی دی .
حالا میخوام اینو به صورت درخت نشون بدم
یه هلپر بازگشتی نوشتم که کار رو انجام میده
ولی مشکلم اینه که وقتی همه شاخه ها و زیرشاخه ها رو لود میکنه دوباره تهش میاد همه رکوردها رو به صورت جدا اضافه میکنه
عکس کد و عکس نتیجه رو میذارم
109384
109382
ممنون میشم اگه کسی به من کمک کنهhttp://barnamenevis.org/images/misc/pencil.png
ali_autumnal
سه شنبه 29 مرداد 1392, 15:35 عصر
همیشه هنگام پرسیدن اینگونه سوال ها بهتره مدل مورد نظرمون رو هم بزاریم تا بشه از روی اون بهتر تصمیم گرفت.
در هر صورت شما دقیقا به همچین چیزی نیاز دارید.
من این کد رو نوشتم و دارم استفاده می کنم دقیقا درست عمل می کنه.
@helper GetComments(IList<Comment> commentLsist, long id)
{
var comments = (from c in commentLsist
where c.ParentId == id
orderby c.CreateDate descending
select c).ToList();
if (comments != null && comments.Count() > 0)
{
//اگر پدر بود این شرط بررسی میشه
if (id == 0)
{
foreach (var item in comments)
{
//سپس اینجا تگهای مورد نظر پدر رو می نویسید
//در انتها جهت نوشتن فرزندادن تابع رو دوباره فراخونی می کنیم
@GetComments(commentLsist, item.CommentId)
}
}
//اگر فرزند بود این بخش اجرا خواهد شد
else
{
foreach (var item in comments)
{
//و سپس تگهای موجود برای ایجاد فرزند رو داخل حلقه می نویسیم
}
}
}
}
@GetComments(Model.NewsViewModel.Comment, 0)
hakim22
سه شنبه 29 مرداد 1392, 15:36 عصر
شما باید با یک شرط بررسی کنید که آیا Category جاری یک root است یا دارای parent است. الان حلقه ی شما بین همه ی عناصر جستجو میکنه ولی باید بین عناصر سرشاخه جستجو کنه.
دومین foreach رو اصلاح کنید
angel5980
سه شنبه 29 مرداد 1392, 17:21 عصر
ممنون از راهنمایی شما .
لیست من بیشتر از دو سطح داره پس کد شما رو تغییر دادم
این کد نهایی شد :
@helper GetChildren(IList<AA.Models.Category> CategoryLsist, int id)
{
var Ctg = (from c in CategoryLsist
where c.CategoryParentID == id
select c).ToList();
if (Ctg != null && Ctg.Count() > 0)
{
if (id == 0)
{
foreach (var data in Ctg)
{
<li>
@data.CategoryName
<ul> @GetChildren(CategoryLsist, data.CategoryID)</ul>
</li>
}
}
else
{
foreach (var data in Ctg)
{
<li>
@data.CategoryName
<ul> @GetChildren(CategoryLsist, data.CategoryID)</ul>
</li> }
}
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.