The best way to pass data to a user control would be to have public properties. For example:
public partial class PopupControl : System.Web.UI.UserControl
{
public string DisplayValues { get; set; }
}
So, now when you are using this control, you can do something like:
<uc:popupcontrol runat="server" id="popup1" displayvalues="some values" xmlns:uc="#unknown" />
Similarly, if you are dynamically creating these controls (as you say in your question):
PopupControl popup = LoadControl(src);
popup.DisplayValues = "some values";
This article pretty much explains this in detail -
Dynamic Loading of ASP.NET User Controls[
^]
Of course any query string can also be accessed in a user control just like in a aspx page, but the cleaner way of doing this is with user control properties.
Hope this helps!