2 Stimmen

ASP.NET-Inline-Code in einem Server-Steuerelement

Ok, wir hatten heute ein Problem auf der Arbeit. Es ist ein seltsames Problem, an das ich nie gedacht hätte.

<form id="form1" runat="server" method="post" action="Default.aspx?id=<%= ID %>" >

Ok, es ist sehr hässlich und ich hätte es selbst nie versucht. Es tauchte in einem Code auf, der vor Jahren geschrieben wurde, aber bis zu diesem Wochenende funktionierte, nachdem eine Reihe von Updates auf dem Webserver eines Kunden installiert wurden, auf dem der Code gehostet wird.

Das tatsächliche Ergebnis ist die folgende html:

<form name="form1" method="post" action="Default.aspx?id=&lt;%= ID %>" id="form1">

Die Url lautet wie folgt:

http://localhost:6735/Default.aspx?id=<%= ID %>

Wie Sie sehen können, wird das "<"-Symbol kodiert, bevor ASP.NET die Seite tatsächlich verarbeitet. Das erscheint mir seltsam, da ich dachte, dass es, obwohl es keineswegs schön ist, funktionieren sollte. Ich bin verwirrt.

Erschwerend kommt hinzu, dass der Kunde darauf besteht, dass es sich um einen Fehler im IE handelt, da es in Firefox zu funktionieren scheint. Tatsächlich ist es auch in Firefox fehlerhaft, aber aus irgendeinem Grund behandelt Firefox es als 0.

Haben Sie eine Idee, warum das passiert und wie man es leicht beheben kann? Alles, was ich versuche, innerhalb der Server-Steuerung zu rendern endet immer entkommen.

Editar Ok, ich habe eine "Lösung" gefunden

<form id="form1" runat="server" method="post" action='<%# String.Format("Default.aspx?id={0}", 5) %>' >

Aber das erfordert, dass ich DataBind aufrufen, die mehr von einem Hack zu den ursprünglichen Hack hinzufügen ist. Schätze, wenn niemand etwas anderes denkt, werde ich mit dem gehen müssen.

0 Stimmen

Wow! Sind Sie sicher, dass es keine andere Möglichkeit gibt, das Problem zu beheben? Machen Sie irgendeine Art von seitenübergreifendem Postback? Es ist selten zu sehen, die "Aktion" für eine Webform App angegeben werden.

0 Stimmen

Sie schreibt sich selbst zurück. Wirklich sehr seltsam! Es sind alles Webformulare mit Inline-Code "dahinter". Ich stimme zu, ich habe eigentlich nie das Attribut action in Webformularen verwendet. Ich hatte nie die Notwendigkeit dazu.

1voto

Tony Punkte 664

Mit ASP.NET 3.5 wurde die Eigenschaft "Action" zum HtmlForm-Steuerelement hinzugefügt. Ihr früherer Code hat gut funktioniert, weil "Action" nur eine Zeichenkette war und das Code-Nugget die zusätzlichen Daten für Sie ausgegeben hat. Jetzt, da es eine Action-Eigenschaft gibt, können Sie kein einfaches Code-Emit-Nugget verwenden, da ein serverseitiges Steuerelement erwartet, dass eine Eigenschaft einen String-Wert hat (wie jede andere Eigenschaft eines serverseitigen Steuerelements).

Die von Ihnen vorgeschlagene Umgehung durch Verwendung der Biding-Syntax ist korrekt. Damit es wie früher funktioniert, müssten Sie das runat=server-Tag auf Ihrem Formular entfernen, was dann den ASPX-Parser daran hindern würde, es als HtmlForm-Steuerelement zu behandeln und es stattdessen als Literal zu behandeln (wo Ihr Code emit nugget funktionieren würde).

Ihre andere Option, die viel sauberer sein kann - ist es, einfach das Formular der Aktion Eigenschaft durch Code-Behind in der page_load gesetzt. Der Grund, warum die Action-Eigenschaft so eingestellt ist, war, dass es in früheren Versionen von .NET Framework keine Unterstützung für die Einstellung der Action-Eigenschaft gab.

0 Stimmen

In der Tat, mit form1.Action = string.Format("default.aspx?id={0}", _id) in Ihrem Code dahinter ist viel sauberer. Sie haben Inline in Ihrer Frage Titel erwähnen, so vielleicht haben Sie einen Grund, es inline obwohl zu halten.

0voto

TheGeekYouNeed Punkte 7479

Ihr Formular benötigt eine runat=server

0 Stimmen

Wie im obigen Beispiel erwähnt, hat es die runat="server"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X