dynamically writing property values to a control INSIDE of a user control?

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

I want to use codebehind to pass property values to a control that I've
embedded INSIDE of a user control.

In other words, let's say I have the following:

MyPage.aspx
....with the following control placed on it...
MyUserControl.ascx
.... and inside of MyUserControl.ascx, is an instance of ....
MyCommercialUploadControl1

I want to be able to write a property to the embedded commerical component:
MyCommercialUploadControl1.TargetFolder

I want to be able write this property programmatically from the aspx page
that originally called the instance of MyUserControl, as follows:

[from MyPage.aspx]
MyUserControl.TargetFolder = @"c:\whatever";

Failure #1: I attempted to add logic to the codebehind for my .ascx that
read the value of a property attached to itself, and then mapped that value
to the embedded commercial control, e.g.

MyCommercialUploadControl1.TargetFolder = this.TargetFolder
// "this" refers to the ascx instance

This did not work.

Failure #2: I experimented with various scenarios involving doing the
mappings onPreInit, thinking I might be running into a page lifecycle issue.
This did not work either.

I can successfully write properties to the user control iself, but I haven't
figured out how to write properties to controls INSIDE of the control. In
all cases the debugger indicates null values where i want my properties to
end up. Can anyone help?

Thank you.
-KF
 
In page, you should either embed the value in the HTML tags (ASP.NET tags)
or use Init (not Page Load) to set the value.

In the control, you can be a bit more lax and do not have to aim for Init(),
but it probably will not hurt you.

--
Gregory A. Beamer
MVP; MCP: +I, SE, SD, DBA
http://gregorybeamer.spaces.live.com/

*************************************************
Think Outside the Box!
*************************************************
 
Ah, good, thank you so much. Writing Page_Init() method for the aspx page
indeed solved the problem, like this:

protected void Page_Init()
{
PictureUploaderAndProcessor1.PathVirtual =
"~/ni/apps/xxx/images/submitted/";
}

User controls seem so powerful in allowing you to build parameterized,
generic , reusuable functionality. It's too bad these little gotchas trip up
us newbies. I wonder if there's a way that the VS.NET IDE could cue you to
the right practices: maybe you could help it figure out intent with xml
markup or something.

Anyway, thank you very much. Now to finish my abstracted
uploading-and-image-resizing-and-cataloguing widget. ;)

-KF

Cowboy (Gregory A. Beamer) said:
In page, you should either embed the value in the HTML tags (ASP.NET tags)
or use Init (not Page Load) to set the value.

In the control, you can be a bit more lax and do not have to aim for
Init(), but it probably will not hurt you.

--
Gregory A. Beamer
MVP; MCP: +I, SE, SD, DBA
http://gregorybeamer.spaces.live.com/

*************************************************
Think Outside the Box!
*************************************************
I want to use codebehind to pass property values to a control that I've
embedded INSIDE of a user control.

In other words, let's say I have the following:

MyPage.aspx
...with the following control placed on it...
MyUserControl.ascx
... and inside of MyUserControl.ascx, is an instance of ....
MyCommercialUploadControl1

I want to be able to write a property to the embedded commerical
component:
MyCommercialUploadControl1.TargetFolder

I want to be able write this property programmatically from the aspx page
that originally called the instance of MyUserControl, as follows:

[from MyPage.aspx]
MyUserControl.TargetFolder = @"c:\whatever";

Failure #1: I attempted to add logic to the codebehind for my .ascx that
read the value of a property attached to itself, and then mapped that
value to the embedded commercial control, e.g.

MyCommercialUploadControl1.TargetFolder = this.TargetFolder
// "this" refers to the ascx instance

This did not work.

Failure #2: I experimented with various scenarios involving doing the
mappings onPreInit, thinking I might be running into a page lifecycle
issue. This did not work either.

I can successfully write properties to the user control iself, but I
haven't figured out how to write properties to controls INSIDE of the
control. In all cases the debugger indicates null values where i want my
properties to end up. Can anyone help?

Thank you.
-KF
 
Back
Top