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>
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