سؤال

ما الذي تجده لتوفير أفضل قائمة لتطبيق الويب ASP.NET 2.0 - 3.5؟ لا يجب أن تكون الاقتراحات ضوابط ASP.NET بشكل خاص ، ولكن يمكن أن تكون قائمة أخرى تعمل بشكل جيد ضمن تطبيق ويب ASP.NET.

أود أن تكون الاقتراحات خيارات لا تتطلب رسوم الشراء أو الملوك. اقتراحات OpenSource ستكون أفضل.

هل كانت مفيدة؟

المحلول

أستخدم Jquery Superfish: http://users.tpg.com.au/j_birch/plugins/superfish/. ينصح به بشده من قبل الآخرين كذلك.

نصائح أخرى

لقد وجدت أن الأكثر مرونة هو استخدام CSS لتصميم قائمة غير مرتبة مثل هذا:

<div id="nav_main" >
<ul>
  <li id="current">Button 1</li>
  <li><a href="#">Button 2</a></li>
  <li><a href="#">Button 3</a></li>
  <li><a href="#">Button 4</a></li>
  <li><a href="#">Button 5</a></li>
</ul>
</div> 

ستجد العديد من طرق CSS لتصميم هذا النوع من القائمة مع صور خلفية Hover ، إلخ.

الآن إذا كنت تستخدم WebForms وترغب في استخدام خريطة Sitemap الخاصة بك ، فإنني أقترح استخدام مكرر وعدم استخدام التحكم في القائمة. سيكون لديك أكبر تحكم في توليد قائمتك بهذه الطريقة.

وبالمثل ، إذا كنت تستخدم ASP.NET MVC ، فيمكنك القيام بـ foreach على خريطة sitemap لإنشاء قائمتك.

هذا بالطبع هو فقط لقوائم بسيطة ، ولكن يمكن توسيعها لتشمل قوائم أكثر تعقيدًا. لقد وجدت القائمة التالية على غرار CSS جيدة جدًا: http://www.lwis.net/free-css-drop-down-menu/

أزرار Yui أو عناصر التحكم في القائمة (تعمل مع HTML الموجودة):

http://developer.yahoo.com/yui/examples/button/btn_example07.html

مكتبة ASP.NET التي تلتف هذه الضوابط بشكل جيد للغاية ، تم إصدارها في ديسمبر 2008:

http://www.codeplex.com/yuiaspnet/

قائمة Jquery Suckerfish ، تعمل باستخدام EL ، LI Elements:

http://be.twixt.us/jquery/suckerfish.php

أود أيضًا إنشاء قوائم غير مرتبة. يتيح للمصمم أن يكون مرنًا مع القوائم. يمكنهم استخدام حل JS+CSS الخاص بهم لإنشاء قوائم منسدلة أو أسلوبها بشكل جيد للقوائم الثابتة. يمكن أن تصبح HTML نفسها بسهولة اليد اليسرى أو عبر الجزء العلوي أو المنسدلة أو حتى خريطة موقع كاملة مع تغييرات CSS.

إلى تلك الملاحظة ، أود تخزين بيانات خريطة الموقع في بنية بيانات هرمية واستخدام Lambda العودية لإنشاءها. على سبيل المثال ، راجع تطبيق وحدة التحكم الصغيرة أدناه مع إخراجه.

الإخراج HTML

<li><a href="/">First</a><li><a href="/firstsub.aspx">FirstSub</a></li><li><a hr
ef="/secondsub.aspx">SecondSub</a></li></li><li><a href="/second.aspx">Second</a
></li>

المصدر ج#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SiteMapDemo
{
    class MenuItem
    {
        public Guid ID {get; set;}
        public Guid? ParentID{get;set;}
        public string Name { get; set; }
        public string Path { get; set; }
        public int Rank { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<MenuItem> menu = new List<MenuItem>(new[]{
                new MenuItem{ID = Guid.NewGuid(), Name = "First", ParentID=null, Path="/", Rank=0},
                new MenuItem{ID = Guid.NewGuid(), Name = "Second", ParentID=null, Path="/second.aspx",Rank=1},
            });
            menu.AddRange(new[] { 
                new MenuItem{ID = Guid.NewGuid(), Name = "FirstSub", ParentID=menu[0].ID, Path="/firstsub.aspx",Rank=0},
                new MenuItem{ID = Guid.NewGuid(), Name = "SecondSub", ParentID=menu[0].ID, Path="/secondsub.aspx",Rank=1},
                });
            Func<List<MenuItem>, Guid?, string> renderMenu = null;
            renderMenu = (menus, Parent) =>
            {
                var sub = menus.Where(m => m.ParentID == Parent).OrderBy(s=>s.Rank).ToList();
                if (sub.Count > 0)
                {
                    StringBuilder sb = new StringBuilder();
                    sub.ForEach(s => { sb.Append(String.Format("<li><a href=\"{0}\">{1}</a>{2}</li>", s.Path, s.Name, renderMenu(menus, s.ID))); });
                    return sb.ToString();
                }
                return "";
            };
            Console.Write(renderMenu(menu, null));
            Console.ReadLine();
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top