2010-07-15 4 views
8

In meiner ASP.Net Seite IÄndern der generierten ASP.Net <form> id?

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

jedoch haben, wann immer das Markup erzeugt wird, verwandelt es sich in

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

Ist es möglich ist, die erzeugte HTML-ID für das Formular festgelegt, was?

Antwort

12

Hinweis: Sie sehen "aspnetForm", weil Sie eine Masterseite verwenden.

ich Ihre Lösung in diesem Thread gefunden ...

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

Kurz gesagt, ist es das, was die Antwort von diesem Link lautet:

Hier ist der verantwortliche Code für diesen Fehler:

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

Wie Sie sehen, wenn der Benennungscontainer sich von der aktuellen Seite unterscheidet (etwas, das passiert, wenn Sie eine Masterseite verwenden) th Die UniqueID-Eigenschaft gibt "aspnetForm" zurück. Diese Eigenschaft wird in das Namensattribut gerendert, das im Formular-Tag an den Client gesendet wird. Wenn Sie das wirklich benötigen, können Sie Ihr eigenes Formular erstellen, indem Sie von htmlform erben und dann die UniqueID-Eigenschaft oder die Name-Eigenschaft überschreiben (dies ist möglicherweise eine bessere Option).

Eine benutzerdefinierte Htmlform-Klasse Beispiel wie folgt sein könnte:

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"; 
     } 
    } 
} 

Hinweis: Sie können auf jeden Fall den Namen der Form von „f“ auf etwas anderes ändern, oder haben sie einen dynamischen Wert zu lesen, sagen aus eine web.config Datei oder so.

und wie so

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

In ASP.NET 4 hat sich dieses Verhalten geändert. Selbst wenn sich das '' Steuerelement in einem Benennungscontainer befindet, wird es nicht mehr in "aspnetForm" codiert. Es hat jetzt tatsächlich die korrekte Client-ID. Ich stieß auf eine Situation, in der wir eine Masterseite innerhalb einer anderen Masterseite verschachtelten. Auf der verschachtelten Masterseite ist die '' definiert und hatte die gleiche Sache passiert. – Sumo

4

Stellen Sie das „ClientIDMode“ Attribut „statisch“ auf dem Formular-Tag verwendet, um den Rahmen zu verhindern, dass Überschreiben mit „aspnetForm“. Das hat mich stundenlang verrückt gemacht.

+1

Für diejenigen, die mit dem Attribut nicht vertraut sind (wie ich): Das Attribut sollte in den Masterseiten-Parametern gesetzt werden: <% @ Master ClientIDMode = "Static" '.... Weitere Informationen finden Sie unter http://weblog.west-wind.com/posts/2009/Nov/07/ClientIDMode-in-ASPNET-40 – IvanH

0

Ich stimme @ Sumo Kommentar unter akzeptierte Antwort und ich hatte die gleiche Situation.

In ASP.NET 4.0, Master-Seite, wenn eine ID nicht gegeben ist, wird der gerenderten HTML automatisch eine zugewiesen, wie z.

Andernfalls hat das gerenderte HTML seine ursprüngliche definierte ID.

Verwandte Themen