访问后值我有一个用户控件我动态加载基本文本框。我想出了如何将值推送到此TextBox。我遇到的问题是我无法从此TextBox中获取输入的值。如何从一个动态加载的用户控件
我必须创建一个类变量从动态加载的控制传递到/。我称之为PBUserControl。
public class PBUserControl : UserControl
{
public IList<NVP> NameValuePairs { get { return _NameValuePairs; } }
public class NVP
{
public NVP() { }
public NVP(string name, string value)
{
this.Name = name;
this.Value = value;
}
public string Name { get; set; }
public string Value { get; set; }
}
}
这似乎很适合将数据发送到用户控件。
我的动态加载的用户控件:
public partial class Basic : PBUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack == false)
{
this.InitializeControl();
}
else
{
this.ProcessSubmit();
}
}
private void InitializeControl()
{
DynamicLiteral.Text = "Some Dynamic Content. " + GetNameValue("TestContent");
TestTextBox.Text = GetNameValue("Test");
}
private void ProcessSubmit()
{
AddNameValuePair("TestContent", "Passing back some value... "+ DynamicLiteral.Text);
AddNameValuePair("Test", TestTextBox.Text);
}
}
这里是页面调用和包括该动态加载控制:
public partial class PageAddEdit : PageBase
{
private PBUserControl _PBUserControl;
protected void Page_Load(object sender, EventArgs e)
{
// Must always desigante the control here else it dissapears.
Control TemplateUserControl = LoadControl("~/Administrator/PageBuilder/Templates/Basic.ascx");
_PBUserControl = (PBUserControl)TemplateUserControl;
_PBUserControl.AddNameValuePair("TestContent", "It is working!!!!!!!!!");
_PBUserControl.AddNameValuePair("Test", "Some test text.");
Template.Controls.Add(TemplateUserControl);
}
protected void MenuGroupRadMenu_Clicked(object sender, EventArgs e)
{
IList<PBUserControl.NVP> nvp = _PBUserControl.NameValuePairs;
}
}
让我解释一下是怎么回事。我可以从主页面设置PBUserControl中的值。它完美地传递给动态加载的用户控件。做它应该做什么。奇妙的作品。
然而,被处理的回发变量之前正被触发的动态加载控制内Page_Load事件。所以在这一点上,TextBox的内容甚至还没有被读取。我通过研究发现了这一点。另外,如果我在动态加载的控件中放置Pre_Rendered事件,则可以在使用调试器逐步执行代码时看到TextBox的值。另外,通过调试器,我可以看到TextBox在Page_Load事件中不被读取。我的研究将我引导到: 1. Page_Init事件被称为 2. Page_Load事件被称为 3.页面表单变量被读取和处理(不知道什么事件) 4.用户事件被称为即:OnClick 5 。Pre_Rendered事件被调用。
我需要能够创建一个事件,将在步骤3之后或步骤4之后调用。这样,我可以捕获TextBox值并在PBUserControl.NVP变量中设置它的值,以便它可以被读取由主页面。如果我在PBUserControl.NVP变量中手动设置一个值,它会在主页面看到并且读取得很好。
在此先感谢。
非常漂亮!做得好 – Andrew 2012-03-12 21:38:26