2010-07-15 13 views
8

Nella mia pagina ASP.Net hoModifica l'ID di ASP.Net generato <form>?

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

Tuttavia, ogni volta che viene generato il markup, si trasforma in

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

E 'possibile impostare ciò che l'id HTML generato per la forma è?

risposta

12

Nota: viene visualizzato "aspnetForm" perché si sta utilizzando una pagina principale.

ho trovato la soluzione in questa discussione ...

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

In breve, questo è ciò che la risposta è da questo link:

Ecco il codice responsabile di tale errore:

Come si può vedere, quando il contenitore di denominazione è diverso dalla pagina corrente (qualcosa che accade quando si utilizza una pagina master) La proprietà UniqueID restituisce "aspnetForm". questa proprietà viene renderizzata nell'attributo name che viene inviato al client nel tag form. quindi, se proprio ne hai bisogno, puoi creare il tuo modulo ereditando da htmlform e poi sovrascrivendo la proprietà UniqueID o la proprietà Name (questa potrebbe essere un'opzione migliore).

Un esempio di classe HtmlForm personalizzato potrebbe essere simile a questo:

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: Si può certamente cambiare il nome del modulo da "F" a qualcos'altro, o fa leggere un valore dinamico, diciamo da un file web.config o così.

e utilizzato in questo modo

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

In ASP.NET 4, questo comportamento è cambiato. Anche se il controllo '

' si trova all'interno di un contenitore di nomi, non lo codifica più in 'aspnetForm'. In realtà ora ha l'ID cliente corretto. Mi sono imbattuto in una situazione in cui avevamo una pagina principale annidata all'interno di un'altra pagina principale. La pagina principale nidificata è dove il '' è definito e ha avuto la stessa identica cosa che accade. – Sumo

4

Impostare l'attributo "ClientIDMode" a "statica" nel tag form per impedire che il quadro di ignorare con "aspnetForm". Questo mi stava facendo impazzire per ore.

+1

Per coloro che non hanno familiarità con l'attributo (come me): l'attributo deve essere impostato nei parametri della pagina master '<% @ Master ClientIDMode =" Statico "' .... Per maggiori informazioni http://weblog.west-wind.com/posts/2009/Nov/07/ClientIDMode-in-ASPNET-40 – IvanH

0

Sono d'accordo con il commento di @ Sumo sotto risposta accettata e ho avuto la stessa situazione.

In ASP.NET 4.0, pagina master, se a non viene fornito un ID, l'html renderizzato verrà automaticamente assegnato a uno, ad esempio.

In caso contrario, l'html renderizzato avrà il suo ID definito originale.

Problemi correlati