2010-08-06 15 views
5

En mi sitio web, estoy usando el control de menú ASP.NET estándar. Ya llegué a escribir un adaptador de control personalizado para deshacerme de la html bastante hortera que genera el adaptador de control predeterminado.Deshabilitar la generación de JavaScript mediante el control de menú de ASP.NET

Una cosa me sigue molestando. De alguna manera, ASP.NET está generando JavaScript adicional que no quiero ni necesito para mis controles de menú, ya que no usaré ninguna de las características dinámicas en el control. Reemplacé el adaptador de control, por lo que no genera HTML compatible para eso.

¿Alguien tiene una idea de cómo puedo evitar que ASP.NET genere el javascript extra para el control del menú?

Respuesta

4

Este problema surgido para mí después de actualizar a ASP.net 4.0 con la instalación de frente a 2010. La solución puede ser forzar el menú para hacer como una mesa o para desvío el nuevo CSS/javascript "características" que 4.0 agrega. La configuración del atributo RenderingMode del menú a "Tabla" me solucionó este problema aunque utilicé un Adaptador de menú para representar el control con listas.

<asp:Menu ID="mnuStuff" runat="server" RenderingMode="Table"> 
    ... 
</asp:Menu> 

Usted puede hacer este sitio amplia controlRenderingCompatibilityVersion ajuste para 3,5 en el web.config:

<system.web> 
    <pages controlRenderingCompatibilityVersion="3.5"/> 
</system.web> 

Esto eliminará la prestación de línea javascript que asp inyecta en la base de la página.

0

Solo tengo planeado hacer una pregunta similar después de 2 horas de búsqueda y no tengo suerte.

Lo que quiero es utilizar el complemento jquery superfish, ya que quiero su animación para una apariencia suave. Y con ASP.NET generado javascript, el superfish simplemente no funcionará.

Y finalmente, tratar de establecer el atributo de control del menú ASP.NET Enabled = false

y la fuente outcoming se convierte en esto:

new Sys.WebForms.Menu({ element: 'mysitemeun', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: **true** }); 

Después de trazar el código, el establecimiento deshabilitado todavía tienen algunos cambios de estilo en el Menú pero no agregarán evento al MenuItem. Y la animación superfish funciona ahora.

if (!this.container.disabled) { 
    Sys.WebForms.Menu._domHelper.addEvent(this.element, 'mouseover', Sys.WebForms.MenuItem._onmouseover); 
    Sys.WebForms.Menu._domHelper.addEvent(this.element, 'mouseout', Sys.WebForms.MenuItem._onmouseout); 
} 
+0

Lo siento, pero esto todavía implica Javascript. Quiero eliminar el javascript por completo. –

+0

Lo siento, no puedo encontrar la forma también, pero solo para decirte que después de la configuración anterior, al menos puedo controlarlo usando jquery y superfish. – Benedict

2

Si prefiere seguir con ASP.Net 4.0 Control de representación puede crear un menú personalizado (derivado de System.Web.UI.WebControls.Menu) y sustituir el OnPreRender:

public class MyCustomMenu : Menu 
{ 
    protected override void OnPreRender(EventArgs e) 
    { 
     // Don't call base OnPreRender 
     //base.OnPreRender(e); 
    } 
} 

que hizo el truco.

+1

cómo usar este fragmento de código? –

+0

La siguiente respuesta a una pregunta similar me ayudó a implementar esta solución: http://stackoverflow.com/questions/232934/subclassing-dropdownlist-in-asp-net – saturdayplace

1

Una forma alternativa de deshacerse de la secuencia de comandos de inicio de menú es llamar al método de secuencia de comandos RegisterStartup antes del evento Menu PreRender, utilizando la misma clave de secuencia de comandos y generando secuencias de comandos ficticias (o vacías).

Esto se basa en los detalles de implementación interna del tipo de menú descubierto mediante Reflector, por lo que es algo frágil.

Por ejemplo, una clase estática que se ve algo como:

static MenuHelper 
{ 
    private static Type _rendererType = 
      typeof(Menu).Assembly.GetType(
       typeof(Menu).FullName + "+MenuRendererStandards" 
      ); 

    public static void RemoveMenuScript(Menu menu) 
    { 
     string dummyScript = "<!-- Removed Menu Startup script -->"; 
     string key = "_registerMenu_" + menu.ClientID; 
     ScriptManager.RegisterStartupScript(menu, _rendererType, key, dummyScript, false); 
    } 
} 

A continuación, sólo tiene que asegurarse de que llame MenuHelper.RemoveMenuScript(menu) antes del evento PreRender del menú.

El OP está utilizando un adaptador para que la respuesta de Tim Santeford sea mejor en su situación. Pero si desea representar un menú estático como una lista sin el código de inicio y sin el esfuerzo de escribir un adaptador, esta podría ser una alternativa.

1
<script type="text/javascript"> 
    Sys.WebForms.Menu = ""; 
</script> 

funciona ..

uso en la página aspx

+0

Gran sugerencia pero causa algunos errores de JavaScript, redefiniendo la función, es decir, 'Sys.WebForms.Menu = function() {};' hace el mismo truco pero no causa estos errores. Ver: http://stackoverflow.com/a/3264250/1020271 – Moo

Cuestiones relacionadas