سلام
یه سیستم منو میخوام مانند منو سایت دیجی کالا
اگه کسی میتونه کمک کنه هم جداول بانک اطلاعاتی و هم کد نویسی کامل asp
Printable View
سلام
یه سیستم منو میخوام مانند منو سایت دیجی کالا
اگه کسی میتونه کمک کنه هم جداول بانک اطلاعاتی و هم کد نویسی کامل asp
مدل دیتابیس :
public partial class Menus {
public int MenuId { get; set; }
public string MenuName { get; set; }
public string MenuCaption { get; set; }
public string MenuController { get; set; }
public string MenuAction { get; set; }
public Nullable<int> ParentMenuId { get; set; }
public string MenuIcon { get; set; }
public string MenuType { get; set; }
public string MenuDescription { get; set; }
}
کدنویسی :
داخل کنترلر مورد نظر (به عنوان مثال اسم کنترلر باشه Layout)یه اکشن متد بسازید به نام Menu به اینصورت :
[ChildActionOnly]
public ActionResult Menu()
{
var menu = GetTreeMenus();
return PartialView(menu);
}
public class TreeMenu
{
public int id { get; set; }
public string label { get; set; }
public string action { get; set; }
public string controller { get; set; }
public int? parentid { get; set; }
public IList<TreeMenu> items { get; set; }
}
public IList<TreeMenu> GetTreeMenus()
{
var Menus = _menus.Where(x => x.ParentMenuId == null).ToList();
List<TreeMenu> tree = new List<TreeMenu>();
foreach(var m in Menus)
{
var node = new TreeMenu
{
id = m.MenuId,
label = m.MenuCaption,
controller = m.MenuController,
action = m.MenuAction,
parentid = m.ParentMenuId,
items = GetChildren(m.MenuId)
};
tree.Add(node);
}
return tree;
}
public List<TreeMenu> GetChildren(int id)
{
var Menus = _menus.Where(x => x.ParentMenuId == id).ToList();
List<TreeMenu> tree = new List<TreeMenu>();
foreach (var m in Menus)
{
var node = new TreeMenu
{
id = m.MenuId,
label = m.MenuCaption,
controller = m.MenuController,
action = m.MenuAction,
parentid = m.ParentMenuId,
items = GetChildren(m.MenuId)
};
tree.Add(node);
}
return tree;
}
view که میسازید از نوع PartialView باشه :
@model IList<TreeMenu>
@ShowTree(Model)
@helper ShowTree(IList<TreeMenu> menus)
{
<ul>
@foreach (var m in menus)
{
if (m.items.Count == 0)
{
<li>
@if (!string.IsNullOrEmpty(m.action) && !string.IsNullOrEmpty(m.controller))
{
<span>@Html.ActionLink(m.label, m.action, m.controller)</span>
}
else
{
<span>@m.label</span>
}
</li>
}
else if(m.items.Count > 0)
{
<li class="parent">
<div>
@if (!string.IsNullOrEmpty(m.action) && !string.IsNullOrEmpty(m.controller))
{
<span>
@Html.ActionLink(m.label, m.action, m.controller)
</span>
}
else
{
<span>@m.label</span>
}
<span class="downIcon ion-chevron-right ico8"></span>
</div>
@ShowTree(m.items)
</li>
}
}
</ul>
}
آخر سر هم باید یه جا این اکشن متذ رو فراخوانی کنید مثلا توی ویوی نمایش محصولات :
کد HTML:<div id="menu">@Html.Action("Menu", "Layout")</div>
سلام
مهندس عزیز حال اگر بخواهیم هنگام نمایش فقط عناوین اصلی نمایش داده شوند و هنگام کلیک زیر مجموع آن نمایش داده شود چکار باید کرد
باتشکر
سلام . دوست گرامی شما میبایست مباحث ajax و جاوا اسکریپت رو در وب مطالعه کنید . چون تا جایی که من چند روزه در سایت برنامه نویس چرخ میزنم سوالاتتون در خصوص ضعف از جاوا اسکریپت هستش .
یه راهنمایی در خصوص این که مواردی مثل منو یا لینک های فوتر یا مواردی که زیاد تغییری ندارن و از دیتابیس فراخوانی میشن بهتون بکنم که میبایست این موارد در مرورگر کلاینت کش بشن و هر یک ساعت یا یک روز یا بستگی به خودتون داره فراخوانی بشه در غیر این صورت با هر بار رفرش صفحه باید این موارد از دیتابیس خونده بشه که سرعت لود سایت میاد پایین و تعداد درخواست های کاربر به دیتابیس میره بالا . :چشمک:
میدونم . من یه قدم جلو تر رو گفتم .
برای این کار باید همه موراد رو فراخوانی کنی ولی با استفاده از جاوا اسکریپت و css فقط عنوان ها رو نمایش بدی بعد در رویداد کلیک عناوین متد نمایش زیر مجموعه ها رو بنویسی
سلام
برای مثال بالا :
$("div#menu ul li div").click(function () {
var parent = $(this).parent();
var status = $(parent).attr('class');
if (status === 'parent') {
$(parent).find("ul").show();
$(parent).removeClass("parent");
$(parent).addClass("expand");
}
if (status === 'expand') {
$(parent).find("ul").hide();
$(parent).removeClass("expand");
$(parent).addClass("parent");
}
});
سلام
کدهای css مثال بالا هم به این صورت میشه :
div#menu ul li a{ color:#f5faff;
text-decoration: none;
display: block;
padding-right: 10px;
}
div#menu ul li div {padding-right: 10px; }
div#menu ul li {
color: #f5faff;
font-family: 'IRANSans';
font-weight: 200;
font-size: 10pt;
line-height: 30px;
text-align: right;
background-color: #1f242a;
border-bottom: 1px solid #242b32;
}
div#menu ul li.expand:hover {
text-align: right;
background-color: #1f242a;
border-right: none;
color: #89ff8f !important;
}
div#menu ul li a:hover ,div#menu ul li div:hover{
text-align: right;
background-color: #414141;
border-right: 2px solid #89ff8f;
color: #89ff8f !important;
}
div#menu ul li:last-child{
border-bottom: none;
}
div#menu ul li ul{
display: none;
}
div#menu ul li ul li{
background-color: #222222;
border-bottom: none;
}