私は動的に読み込んでいるユーザーコントロールに基本的なTextBoxを持っています。私はこの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 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;
}
}
は私がここで何が起こっているかを説明しましょう。ここでは
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);
}
}
は、この動的にロードされたコントロールを含むページの呼び出しです。メインページからPBUserControlの値を設定できます。動的にロードされたユーザーコントロールに完全に渡されます。それは何をすることになっていますか。すばらしく動作します。
ただし、ポストバック変数が処理される前に、動的に読み込まれたコントロール内のpage_loadイベントが発生しています。その時点でTextBoxの内容はまだ読み込まれていません。私はこれを研究によって見つけました。また、動的にロードされたコントロール内にPre_Renderedイベントを配置すると、デバッガでコードをステップ実行するときにTextBoxの値が表示されます。また、デバッガでは、Page_Loadイベント中にTextBoxが読み込まれないことがわかりました。私の研究は、以下に私を導く: 1. Page_Initイベントが 3.ページのフォーム変数を読み込み、 4.ユーザーイベントが呼び出される(どのようなイベントわからない)処理されますと呼ばれる 2. Page_Loadイベントと呼ばれている、すなわち:クリック時 5 Pre_Renderedイベントが呼び出されます。
手順3の後、手順4の前または途中で呼び出されるイベントを作成できるようにする必要があります。そうすれば、TextBox値を取得してPBUserControl.NVP変数内の値を読み取れるように設定できますメインページでPBUserControl.NVP変数に手動で値を設定すると、メインページにその値が表示され、正常に読み込まれます。
ありがとうございます。
かなり気の利いを!よくやった – Andrew