26. oktober 2004 - 17:08Der er
26 kommentarer og 1 løsning
Få fat i programatisk kontrol
Koden herunder fejler.. Hvordan får jeg fat i fx en textbox som er lavet programatisk efter fx en postback?..
________________________________________ Public Class login: Inherits UserControl Public UC As PlaceHolder Sub Page_Load Dim table As New Table() Dim row As New TableRow() Dim cell As New TableCell()
Dim txtName As New TextBox() txtName.Id = "txtName"
Dim txtPass As New TextBox() txtPass.Id = "txtPass" txtPass.TextMode = TextBoxMode.Password
Dim btnLogin As New Button() btnLogin.Text = "Log ind"
cell.Text = "Navn : " row.Cells.Add(cell)
cell = New TableCell() cell.controls.Add(txtName) row.Cells.Add(cell)
cell = New TableCell() cell.Text = "Password : " row.Cells.Add(cell)
cell = New TableCell() cell.controls.Add(txtPass) row.Cells.Add(cell)
cell = New TableCell() cell.controls.Add(btnLogin) row.Cells.Add(cell)
table.Rows.Add(row)
UC.Controls.Add(table) If IsPostBack Then Response.write(txtName.Text) End If End Sub End Class
'Public Event Click(sender As Object, e As System.EventArgs)' is an event, and cannot be called directly. Use a 'RaiseEvent' statement to raise an event.
Den highligther linien : btnLogin.Click += New EventHandler(btnClicked)
Public Class WebForm1 Inherits System.Web.UI.Page Protected Form1 As HtmlForm
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init InitializeComponent() End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim b As New Button AddHandler b.Click, AddressOf b_Click Form1.Controls.Add(b) End Sub Private Sub b_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Response.Write("test") End Sub End Class
Hmm.. læste lige mit spm.. Vi har ikke snakket om det jeg egentligt spurgte om.. Kan vi hurtigt tage den, så lægger jeg lige lidt ekstra points ind også.. ;)
Fx: Dim txtName As New TextBox() txtName.Id = "txtName"
Kommer ud som: <input name="_ctl3:txtName" type="text" id="_ctl3_txtName" /> Og så kan jeg ikke få fat i den bagefter som fx txtName.Text ...
jojo.... der er lidt magi i luften med den slags ;o)
prøv den her :
Public Class WebForm1 Inherits System.Web.UI.Page Protected Form1 As HtmlForm Protected someTextBox As New TextBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init InitializeComponent() End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim b As New Button AddHandler b.Click, AddressOf b_Click Form1.Controls.Add(someTextBox) Form1.Controls.Add(b) End Sub Private Sub b_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Response.Write(someTextBox.Text) End Sub End Class
hedder din serverside form i aspx-filen Form1 ? Protected Form1 As HtmlForm // Form1 skal være id-et på formen i aspx-filen : <form id="Form1" method="post" runat="server">
Ehm.. det gjorde ikke nogen forskel.. Men jeg bruger ikke Form1.Controls.Add(txtName), men ligger den i en celle og det ender med at være en tabel... Eller gør det ikke noget?..
Dette er klassen det drejer sig om.. : Public Class login: Inherits UserControl Public UC As PlaceHolder Public txtName As TextBox Protected enform As HtmlForm Dim P As New Protection
Sub Page_Load Dim table As New Table() Dim row As New TableRow() Dim cell As New TableCell()
If P.IsLogged() Then Response.Write("2") ElseIf P.IsAdmin() Then Response.Write("3") Else Dim txtName As New TextBox() txtName.Id = "txtName"
Dim txtPass As New TextBox() txtPass.Id = "txtPass" txtPass.TextMode = TextBoxMode.Password
Dim btnLogin As New Button() btnLogin.Text = "Log ind" AddHandler btnLogin.Click, AddressOf btnClicked
cell.Text = "Navn : " row.Cells.Add(cell)
cell = New TableCell() cell.controls.Add(txtName) row.Cells.Add(cell)
cell = New TableCell() cell.Text = "Password : " row.Cells.Add(cell)
cell = New TableCell() cell.controls.Add(txtPass) row.Cells.Add(cell)
cell = New TableCell() cell.controls.Add(btnLogin) row.Cells.Add(cell)
table.Rows.Add(row)
UC.Controls.Add(table) End If End Sub
Public Sub btnClicked(ByVal sender As System.Object, ByVal e As System.EventArgs) Response.Write("Click! ") response.Write(txtName.Text) End Sub
jeps - du laver en ny textbox nede i din metode, og den der så står som din klassevariabel bliver aldrig instantieret - det er derfor den er null når du spørger på den. mvh
det ser jeg frem til... hold dig munter så længe :o) mvh
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.