dynamic user control textbox is empty when accessing from aspx pag

R

randman

I have created an ASPX page that has a placeholder that dynamically gets
assigned various user controls (that I have also created) during runtime. On
one of the user controls contains a textbox. I need to access the ascx page
textbox value from a sub routine in the aspx page.

This is the code that I have that returns the value of the textbox (named
txtName)

Public Property UserName() As String
Get
Return txtName.Text
End Get
Set(ByVal Value As String)
txtName.Text = Value.ToString
End Set
End Property

When I call this from my aspx page nothing is returned even though I have
typed something into the txtName textbox.

If I assign a value to the textbox, as in the following example, then the
value ("Hello") does appear in the aspx page that calls this code.

Public Property UserName() As String
Get
txtName.Text = "Hello"
Return txtName.Text
End Get
Set(ByVal Value As String)
txtName.Text = Value.ToString
End Set
End Property


The user control is called ranman.ascx

This is the code that dynamically assigns the user control to the aspx page

Session("strBody") = ranman
strControlBody = "controls\" & CStr(Session("strBody")) & ".ascx"
ctlBody = LoadControl(strControlBody)
phBody.Controls.Add(ctlBody)


This is the code on the aspx page that calls the user control

Dim myUserControl As ranman = CType(LoadControl("controls\ranman.ascx"),
ranman)

strUserName = myUserControl.UserName


It seems like a timing issue, but I could be wrong
I'm not even sure if I am on the right path with this. Please help !!

Thanks in advance,
Randman
 
H

Harolds

Your code creates a new control, so you are not trying to get the text box
value from the control in which you entered the data, but you are getting the
text box value from a brand new control of the same type.

I am not sure how to remedy your problem.
Try recreating your control in LoadViewState override, then in the postback
method do:
Dim myUserControl As ranman = FindControl(ControlID)
strUserName = myUserControl.UserName

Now what the controlid is I am not sure you will have to figure that out for
yourself.

That fact that you are using a dynamically created user control is what
makes this complicated.
 
R

randman

Thanks for your reply, your explanation has really helped me understand what
is taking place. I will investigate your suggestion of recreating the
control in then "LoadViewState override".

randman
 
S

sam

Hi there,

Make sure you are adding the user control in the Init() method of the
aspx page. Then you should be able to get the text value in the Load()
method of the aspx page.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,046
Latest member
Gavizuho

Latest Threads

Top