2010-07-15 14 views
8

En mi página ASP.Net tengo¿Cambiar el ASP.Net generado <form> id?

<form id="MasterPageForm" runat="server"> 

Sin embargo, cada vez que se genera el marcado, se convierte en

<form name="aspnetForm" method="post" action="SomePage.aspx..." id="aspnetForm"> 

¿Es posible establecer cuál es la Identificación del código HTML generado para la forma es?

Respuesta

12

Nota: está viendo "aspnetForm" porque está utilizando una página maestra.

He encontrado su solución en este hilo ...

http://forums.asp.net/p/883974/929349.aspx

En resumen, esto es lo que la respuesta es a partir de ese enlace:

Aquí está el código responsable de ese error:

public override string UniqueID 
{ 
     get 
     { 
      if (this.NamingContainer == this.Page) 
      { 
        return base.UniqueID; 
      } 
      return "aspnetForm"; 
     } 
} 

Como puede ver, cuando el contenedor de nombres es diferente de la página actual (algo que sucede cuando utiliza una página maestra) th e La propiedad UniqueID devuelve "aspnetForm". esta propiedad se representa en el atributo de nombre que se envía al cliente en la etiqueta del formulario. por lo tanto, si realmente lo necesita, puede crear su propio formulario heredando de htmlform y luego anular la propiedad UniqueID o la propiedad Name (esta puede ser una mejor opción).

Un ejemplo de clase HtmlForm personalizada podría ser así:

public class Form : System.Web.UI.HtmlControls.HtmlForm 
{ 
    public Form() : base() { } 

    public override string UniqueID 
    { 
     get { 
      if (this.NamingContainer == this.Page) 
      { return base.UniqueID; } 

      return "f"; 
     } 
    } 
} 

Nota: Usted puede sin duda cambiar el nombre de la forma de "f" para otra cosa, o que se lea un valor dinámico, digamos de un archivo web.config más o menos.

y se utiliza como tal

<%@Register tagprefix="LA" Namespace="Mynamespace"%> 
... 
<LA:form runat="server" id="frm"> 
... 
</LA:form> 
+5

En ASP.NET 4, este comportamiento ha cambiado. Incluso si el control '

' está dentro de un contenedor de nombres, ya no lo codifica como 'aspnetForm'. En realidad, ahora tiene la ID de cliente correcta. Me encontré con una situación en la que teníamos una página maestra anidada dentro de otra página maestra. La página maestra anidada es donde se define '' y tenía exactamente lo mismo que sucede. – Sumo

4

Ajuste el atributo "ClientIDMode" a "estática" en la etiqueta del formulario para evitar que el marco de la sustituya por "aspnetForm". Esto me estaba volviendo loco durante horas.

+1

Para aquellos que no están familiarizados con el atributo (como yo): El atributo debe establecerse en los parámetros de la página maestra '<% @ Master ClientIDMode =" Static "' .... Para más información http://weblog.west-wind.com/posts/2009/Nov/07/ClientIDMode-in-ASPNET-40 – IvanH

0

Estoy de acuerdo con el comentario de @ Sumo en la respuesta aceptada y tuve la misma situación.

En ASP.NET 4.0, página maestra, si a no se le da una identificación, el html representado se asignará automáticamente uno, como.

De lo contrario, el html renderizado tendrá su ID original definida.

Cuestiones relacionadas