Lesen dynamisch generierte HTML-element mit dem Wert in der codebehind-in ASP.NET
Habe ich eine asp.net Seite, wo ich die unten markup. Im Grunde ist dieser markup generiert von codebehind durch das Lesen von Datensätzen aus einer Tabelle und einer Schleife durch. Für jeden Datensatz in der Tabelle, es wird ein div-block.
Grundsätzlich diese form ist zu Lesen/anzeigen der Einstellungen für einen Benutzer. Die Einstellungen, die Einträge werden in einer Tabelle gespeichert.
<div id='divContainer' runat='server'>
<div id='div1' runat='server'>
<table>
<tr>
<th>Name</th>
<td><input type='text' id='txtName1' value='something' /></td>
</tr>
</table>
</div>
<div id='div2' runat='server'>
<table>
<tr>
<th>Domain name</th>
<td><input type='text' id='txtName2' value='something' /></td>
</tr>
</table>
</div>
<div id='div3' runat='server'>
<table>
<tr>
<th>URL</th>
<td><input type='text' id='txtName3' value='something' /></td>
</tr>
</table>
</div>
<div id='div4' runat='server'>
<table>
<tr>
<th>Some other value is enabled ?</th>
<td><input type='checkbox' id='chk4' /></td>
</tr>
</table>
</div>
</div>
Den id ' s der einzelnen input-element einzigartig sein wird. Jetzt in der codebehind-ich möchte Lesen Sie die Werte von jedem input-element um die änderungen zu speichern Benutzer aus. Wie kann ich Lesen Sie die Elemente, die hier? Da der mark-up wird generiert, in der codebehind-als eine Zeichenfolge angehängt, die die INNERE HTML-Code der externen div, Lesen kann ich nicht Werten, wie wir es tun für eine Steuerung, die per drag und drop in der IDE.
Controls
Sammlung? Etwas anderes?was passiert, wenn Sie die Steuerelemente runat="server"? Kann nicht noch erreichen?
Können Sie daran interessiert zu wissen, dass Ihr
table
Elemente fehlen, deren End-tags.Wahre Geschichte.
Mein Fehler ! Behoben. , Oded : ich bin die Schaffung eines string-und die Zuweisung an die innere HTML-Eigenschaft des externen div
InformationsquelleAutor Shyju | 2010-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn diese gesendet werden zurück zu der Seite in einem standard-HTTP-POST dann Lesen Sie die Werte in die
- Anfrage.Form
NameValueCollection
.Im wesentlichen alle server-controls, die sich form-Elemente übersetzt werden standard-HTML-Formular-Elemente, so wie Sie haben es, wenn auch mit mehr-markup generiert .NET zu helfen, Sie zu identifizieren. Dann ordnet automatisch Ihre Werte zurück an den server steuert für Sie auf dem postback, aber die Werte selbst sind nur noch in einer standard-HTTP-POST, die Sie zugreifen können, manuell.
(Dies ist auch eine gängige Methode, bei der Buchung ein Formular aus einer einzelnen ASP .NET-Anwendung zu einer anderen.)
txtName3.Text
im serverseitigen code. Er muss analysieren, die von NVC oder er muss eine andere Methode zur Wiederherstellung der Anfrage Daten in ein Formular ein.Sie sind nicht server-Steuerelemente, Nein. Aber die Werte sind in
Request.Form
und herausgezogen werden kann, durch das element name leicht genug. Als für das halten Sie hartnäckig auf der dynamischen Seite, das dauert einige Arbeit. Aber die grundlegende Idee, um die Werte auf dem postback kann nur arbeiten, wie immer form-Werte in jeder anderen serverseitigen Sprache.Stimmt, daher meine Antwort, es hängt davon ab, wie er sucht, Sie zu benutzen. Wenn er erwartet, dass
txtName3.Text
dann funktioniert es nicht. Ich glaube, du und ich Stimmen hier, ich glaube nicht, dass er versteht, page lifecycle, oder er ist nicht auf der Suche zu verwenden ASP.NET Motor der Weg, alle anderen nicht. Für diese Angelegenheit, ich'ld nur mit einem gridview-Steuerelement oder etwas ähnliches mit Befehlsschaltflächen und mit ihm getan werden. So viel einfacher.Ziemlich viel, ja. Aber ich würde sagen, da sitzt er auf eine Gelegenheit, zu lernen eine Menge über die Natur seiner Entwicklung die Umwelt, anstatt Sie einfach ziehen Sie ein Steuerelement auf einem Formular (z.B. gridview) und haben es einfach nur Arbeit. Was er versucht zu tun, ist nicht weit hergeholt, und ist oft gesehen, in der so etwas wie PHP oder auch ASP .NET MVC. Nichts falsch mit ein wenig manuelle form der manipulation überhaupt.
Ich Stimme es. Ich weiß nur nicht, tun Sie es in meinem apps 😉
InformationsquelleAutor David
Wenn Sie möchten, schnappen Sie sich Ihre Werte für die generierten Steuerelemente, die Sie zu tun haben 2 Dinge.
Generieren der input-controls mit einem runat= "server" ein tag für jedes Steuerelement (sonst werden Sie nicht in der Anforderung enthalten sind.Forms-Auflistung.) Dies ist wahrscheinlich der Schritt, Ihr fehlt.
<input type='text' id='txtName1' runat='server' value='something' />
Schnappen Sie sich Ihre Werte aus dem Request.Formular-Sammlung auf postback
string txtValue1 = Request.Form["txtName1"];
Sollte es wirklich so einfach sein. Getestet habe ich diese gegen Ihren code mit einem DIV-Tag als container und ein einfaches javascript zu injizieren und die Kontrolle Zeichenfolge in das innerHTML. Wenn Ihr immer alle Fragen die Sie haben können, zu Debuggen und zu sehen, ob die dynamische Steuerung-ID geändert durch einfügen in naming-container oder so etwas.
InformationsquelleAutor Tj Kellie
Also die Hauptlast der Geschichte ist, dass, wenn Sie dynamisch hinzufügen eine Kontrolle nach
Page_Init
dann POSTBACK Werte kann nicht eingefügt werden zurück in die Steuerelemente.CF: http://www.15seconds.com/issue/020102.htm und http://msdn.microsoft.com/en-us/library/ms178472.aspx
Einige der anderen Antworten hier suggerieren "oh, fügen Sie ein runat=server der Kontrolle", aber wenn Sie es schaffen, in der codebehind und nicht in der Page_Init, dann macht NULL Unterschied.
Lassen Sie mich wissen, ob nicht, wie Sie beim erstellen der Steuerelemente oder wenn das nicht, wie du mit Ihnen, und ich werde diese überarbeiten Antwort auf weitere details. Es ist wirklich alles läuft darauf hinaus, wie Sie versuchen, Zugriff auf die Werte.
Nein, wie sind Sie mit Ihnen auf postback? Lesen Sie
txtName3.Text
?eigentlich ist es nicht, wenn Sie ein Steuerelement erstellen, die auf codebehind, das ist serverside sicher. OP nicht "create control" serverside stattdessen ändert sich das innerHtml von einem serverside-Kontrolle..
Dein Kommentar macht für mich KEINEN SINN. Ich Rede von der asp.net Motor wird automatisch füllen Sie die Daten wieder in die Boxen, so kann er auf Sie zugreifen, indem Sie die variable name. Sie sprechen über die Präsentation gehen auf die Benutzer. Ich glaube nicht, dass Sie gelesen habe, die links habe ich schon verwiesen, und ich glaube nicht, dass Sie verstehen, worauf ich hinaus will. Er kann sich nicht darauf verlassen, dass die ASP.NET Motor an, legte seine post-Werte zurück, er geht, um zu tun, was @David sagte.
Er sollte zuerst verstehen, was er tun will 🙂
InformationsquelleAutor jcolebrand
Allgemein, würden Sie die Eingabe-Steuerelemente, die Sie erstellen, dynamisch (in diesem Fall ein Textfeld) im inneren so etwas wie ein panel-Steuerelement (die container). Dann, nachdem der Benutzer gepostet hat, Ihre Daten, Sie würden-Schleife, die container
panel.Controls
Sammlung und abrufen jede TextBox text.Sich bewusst sein, dass einige Einschränkungen gelten beim arbeiten mit dynamisch erstellten controls, da ASP wird von stateless Natur.
Diese Seite zeigt, wie dies umzusetzen:
Hinzufügen von Dynamischen Zeilen in ASP.Net GridView-Steuerelement mit Textfelder
InformationsquelleAutor Leniel Maccaferri
Habe ich nicht getestet, aber ich schlage vor, dass:
Fügen Sie Ihre dynamische Steuerelemente mit runat="server" - tag innerhalb eines anderen controls mit runat="server"(wie panel-Steuerelement). Dann können Sie auf Sie zugreifen wie diese:
Sie können das nicht machen, da keines der Steuerelemente server-Seite..
Ok hab ich schon gesagt: ich habe nicht testen Sie es. Danke.
InformationsquelleAutor mavera