close
دانلود آهنگ جدید
باز نگهداشتن منو بعد ورود به صفحه دیگر

یک توسعه دهنده .Net

باز نگهداشتن منو بعد ورود به صفحه دیگر

من در حال طراحی سایت جدید بودم که منوی کناری سایتم (در بخش پنل مدیریت) یک منو قرار داده بودم مشکل اینجا بود که وقتی روی یکی از لینک هایش کلیک می کردم به آن صفحه میرفتم ، منو بسته میشود. راه های مختلفی به ذهنم خورد که مثلا کل منو را در کوکی ذخیره و بارگذاری کنم که مشکلات خودشو داشت تا اینکه پس از جستجو به این نتیجه رسیدم که نیاز به ساختن یک Html Helper  و استفاده ار آن در منو هست. اول ساختار منو من به این صورت است که 2 بخش دارد یک بخش اصلی (Main Menu) و یک بخش فرعی(SubMenu)   در اصل من…

باز نگهداشتن منو بعد ورود به صفحه دیگر

باز نگهداشتن منو بعد ورود به صفحه دیگر 289

من در حال طراحی سایت جدید بودم که منوی کناری سایتم (در بخش پنل مدیریت) یک منو قرار داده بودم مشکل اینجا بود که وقتی روی یکی از لینک هایش کلیک می کردم به آن صفحه میرفتم ، منو بسته میشود. راه های مختلفی به ذهنم خورد که مثلا کل منو را در کوکی ذخیره و بارگذاری کنم که مشکلات خودشو داشت تا اینکه پس از جستجو به این نتیجه رسیدم که نیاز به ساختن یک Html Helper  و استفاده ار آن در منو هست.

اول ساختار منو من به این صورت است که 2 بخش دارد یک بخش اصلی (Main Menu) و یک بخش فرعی(SubMenu)

 

در اصل من باید دو تا ایتم را فعال کنم یکی بخش اصلی و دیگری بخص فرعی که کلیک شده. خوشبختانه بخش های اصلی هرکدام مربوط به یک area  از سایت میباشد.

خوب بریم سراغ کد نویسی برای اینکار ما یک Html Helper  میسازیم که 2 تا متد دارد یکی برای فعال کردن منو فرعی و دیگری برای منوی اصلی:

 

 

 

 

 

  1. publicstaticclassSidebarActiveMenu
  2. {
  3. publicstaticstringSubMenuIsActive(thisHtmlHelper htmlHelper,string action,string controller)
  4. {
  5. var routeData = htmlHelper.ViewContext.RouteData;
  6. var routeAction = routeData.Values["action"].ToString();
  7. var routeController = routeData.Values["controller"].ToString();
  8. //string controllerName =
  9. // (string)htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
  10. //string areaName =
  11. // (string)htmlHelper.ViewContext.RouteData.DataTokens["area"];
  12. return(controller == routeController && action == routeAction)?"current":"";
  13. }
  14. publicstaticstringMainMenuIsActive(thisHtmlHelper htmlHelper ,string area)
  15. {
  16. var routeData = htmlHelper.ViewContext.RouteData;
  17. var routeArea = routeData.DataTokens["area"];
  18. return(area == routeArea)?"open active":"";
  19. }
  20. }

 

SubMenuIsActive: همونطور که از اسمش پیداست برای فعال کردن منو های فرعی میباشد. ر.ش کارش انجوریه که 2 نام controller و action  میگیره و مقادیر کنترلر و اکش فعلی هم از طریق Route  دریافت میکنه و با هم مقایسه می کند اگر مقادیر یکی بود نام کلاس css  که منو را اکتیو میکند را بر میگرداند در غیر اینصور رشته خالی بر میگرداند.

MainMenuIsActive: مانند SubMenuIsActive می باشد با این تفاوت که نام area  را مقایسه میکند.

 

نحوه استفاده هم در ویو به این صورت عمل میکنیم: