Pregunta

¿Base de datos?¿Variables de página?¿Enumeración?

Estoy buscando opiniones aquí.

¿Fue útil?

Solución

La función ASP.NET Sitemap está diseñada para eso y funciona bien en muchos casos.Si llegas a un lugar donde quieres que tu El menú tendrá un aspecto diferente al de su mapa del sitio; aquí se muestran algunas soluciones.

Si tiene una estructura de sitio dinámica, puede crear un proveedor de mapas de sitio personalizado.Puede llegar al punto en el que es más problemático de lo que vale la pena, pero en general completar el menú desde el mapa del sitio le brinda algunas características interesantes, como el recorte de seguridad, en el que las opciones del menú son apropiadas para el usuario que ha iniciado sesión.

Otros consejos

Esa es una pregunta interesante, hay muchas maneras de abordarla.

Puede cargar la estructura del menú desde XML, así es como funciona la configuración integrada de controles de navegación/mapa del sitio de ASP.NET.Esta es probablemente una buena opción en general y hay herramientas razonablemente buenas para ello en Visual Studio.

Si se trata de un menú dinámico que necesita cambiar mucho, obtener los elementos de una base de datos podría ser una buena idea, pero definitivamente querrás almacenarlos en caché, para que la base de datos no se vea afectada en cada representación de página.

He creado un sitio usando el Controles de inicio de sesión de ASP.NET y Autenticación de formularios para membresía/credenciales para una aplicación web ASP.NET.Y estoy usando un mapa del sitio para la navegación del sitio.

Tengo controles de navegación de menú y TreeView de ASP.NET completados mediante SiteMapDataSource.Pero las páginas prohibidas sólo para administradores son visibles para usuarios que no son administradores.

  1. Creé un archivo de mapa del sitio web.sitemap.Y yo utilizó la herramienta de administración de sitios web ASP.NET para configurar reglas de acceso.

  2. Agregué controles de navegación en mi página .master…

    <asp:SiteMapPath ID="SiteMapPath1" runat="server" />
    <asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource2" />
    <asp:TreeView ID="TreeView1" runat="server"  DataSourceID="SiteMapDataSource1" />
    <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
    <asp:SiteMapDataSource ID="SiteMapDataSource2" runat="server" ShowStartingNode="False" />
    
  3. Configuré securityTrimmingEnabled en "true" en mi archivo web.config...

    <?xml version="1.0"?>
    <configuration>
        ...
        <system.web>
            ...
            <siteMap defaultProvider="default">
                <providers>
                    <clear/>
                    <add name="default"
                        type="System.Web.XmlSiteMapProvider"
                        siteMapFile="web.sitemap"
                        securityTrimmingEnabled="true"/>
                </providers>
            </siteMap>
            ...
        </system.web>
        ...
    </configuration>
    
  4. Ajusté el árbol en el código detrás del archivo master.vb...

    Protected Sub TreeView1_DataBound( ByVal sender As Object, ByVal e As EventArgs ) Handles TreeView1.DataBound
    
        'Collapse unnecessary menu items...
        If TreeView1.SelectedNode IsNot Nothing Then
            Dim n As TreeNode = TreeView1.SelectedNode
            TreeView1.CollapseAll()
            n.Expand()
            Do Until n.Parent Is Nothing
                n = n.Parent
                n.Expand()
            Loop
        Else
            TreeView1.ExpandAll()
        End If
    
    End Sub
    

SI el menú es dinámico por usuario entonces tendrás que acceder a la base de datos de cada usuario.A partir de entonces probablemente lo almacenaría en la sesión para evitar futuros viajes de ida y vuelta a la base de datos.

Si es dinámico, pero todo el sitio ve los mismos elementos, colóquelo en la base de datos y almacene en caché los resultados.

Vincularse a un mapa del sitio es sin duda lo más fácil.

Depende completamente de cómo funciona el sitio.Estoy de acuerdo con la mayoría en que un mapa del sitio suele ser la mejor manera de hacerlo.Sin embargo, si está utilizando un CMS, es posible que deba mantenerlo en la base de datos.Si tiene un sitio centrado en taxonomía, utilice la taxonomía para crear el menú.No existe una "mejor manera" de navegar, sólo la mejor manera para una situación determinada.

Tenemos una característica similar.

El menú de la aplicación se carga en la página maestra desde la base de datos, porque las opciones visibles del menú dependen de los permisos del usuario.

Un par de convenciones y una estructura inteligente en la base de datos garantizan que el código de carga del menú sea genérico y navegue automáticamente a la pantalla adecuada al seleccionar una determinada opción del menú.Usamos UIP para navegar y ComponentArt para controles web.

Por cierto, ComponentArt apesta.Por otra parte, supongo que todas las bibliotecas de control de terceros lo hacen.

El acceso eficiente es una característica primordial desde la perspectiva del usuario.Un enfoque sugerente genérico esbúsqueda en el diccionario, que se ajusta bien a las estructuras de menú grandes y anidadas también.El usuario navega mediante clics o pulsaciones de teclas únicas; además, las teclas de flecha avanzan (derecha) o retroceden (izquierda) con arriba/abajo como de costumbre.Sugeriría completar los menús a pedido, excepto el inicial, y proporcionar una acción de JavaScript, cada vez que se seleccione un elemento final.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top