I think there are 2 parts to this.
Firstly, when you add controls to the .aspx page, visual studio automatically creates properties for these controls (you can see this in some versions of asp.net by looking at the aspx.designer.cs file - you should see properties relating to each of the controls in the aspx file).
As you are adding the controls dynamically the controls are not added to the class. So you will need to keep track of them manually. Perhaps create a class level field/property and store them in that. In your case probably worth using a Dictionary:
private Dictionary<int, LinkButton> alphabetLinkButtons = new Dictionary<int, LinkButton>();
This should allow you to access any of the link buttons by their id in other code called during page_load:
f
or (int i = 65; i <= 90; i++)
{
LinkButton lbtnCharacters = new LinkButton();
lbtnCharacters.Text = "<u>" + Char.ConvertFromUtf32(i) + "</u>";
lbtnCharacters.ID = Char.ConvertFromUtf32(i);
lbtnCharacters.CommandArgument = Char.ConvertFromUtf32(i);
lbtnCharacters.CommandName = "AlphaPaging";
lbtnCharacters.CssClass = "firstCharacter";
lbtnCharacters.Click += new EventHandler(lbtnAlphabets_Click);
alphabets.Controls.Add(lbtnCharacters);
// add this
alphabetLinkButtons.Add(lbtnCharacters);
}
Now, later in your code you should be able to access the controls like this:
alphabetLinkButtons[65].Text = "Some new text";
Now point 2... these buttons will not exist on postback.
The ViewState for the page is created in the Initialize event of the page lifecycle, so by adding your controls to the page during page_load, they are never added to the viewstate, so you will not have access to them in the post back event. This may not cause you any problems, but good to be aware of it. There are lots of posts out there that cover this - just search "Dynamically adding controls viewstate page_load initialize".
Here is a good discussion of the issue.
Hope this helps