views:

383

answers:

3

If I put a control in a .aspx file like this;

<asp:TextBox ID="protectedTextBox" runat="server">Some info</asp:TextBox>

I get a declared control in the page's .aspx.designer.cs file;

protected global::System.Web.UI.WebControls.TextBox protectedTextBox;

But I'd like to change the access modifier of the control to public. Is there any attribute or similar that I can set to change the access modifier?

Here's why I want to do it. I am trying to have cross-page postbacks work nice and neatly. I have two pages:

FirstPage.aspx
    MyTextBox : textbox
    MyButton  : button, @PostbackUrl=Secondpage

SecondPage.aspx
    MyLabel : label

When the user clicks FirstPage.MyButton, I want to write the value of FirstPage.MyTextBox.Text into SecondPage.MyLabel.Text. I could do it with Page.FindControl, but this seems like a poor substitute to casting the previous page as a FirstPage object and referring directly to the MyTextBox control on it. Something like this;

// on the page_load of SecondPage.aspx;
var previousPage = this.PreviousPage as FirstPage;
this.MyLabel.Text = previousPage.MyTextBox.Text;

Is there any way to change the access modifier?

A: 

One option I've considered is writing a public property which exposes the original page;

public TextBox PublicTextBox { get { return this.MyTextBox; } }

Which would get the job done, but seems hacky.

Steve Cooper
+2  A: 

You can just delete the declaration from the designer and put it in your code behind.

The comments around the declaration say to do this.

/// To modify move field declaration from designer file to code-behind file.
Robin Day
+1  A: 

Steve, exposing that page's controls would make sense if you'd need to manipulate those controls, but in your case you just need to pass some data (that string) to the other handler, so I would expose that and not the control itself.