[英]ASP.NET dynamically adding UserControl to PlaceHolder, not fire Click Event, only Page_Load
在我的ASP.Net頁面中,我有PlaceHolder和Button。 當用戶單擊此按鈕時,我將接口方法getControl中的一些UserControls添加到PlaceHolder。 碼:
protected void ActionBtn_Click(object sender, EventArgs e)
{
if (provider != null)
{
actualObject = (PlaceHolder)provider.getControl();
PlaceHolder1.Controls.Add(actualObject);
}
}
方法getControl:
public object getControl()
{
ph = new PlaceHolder();
exportInbBtn = new Button();
exportInbBtn.Text = "Export Inventury";
exportInbBtn.Click += new EventHandler(myButton_ServerClick);
ph.Controls.Add(exportInbBtn);
exportInbBtn.ID = "exportInbBtn";
return ph;
}
ASP頁面中的Page_Load和Page_Init方法為空。 問題是,當用戶單擊按鈕exportInbBtn(帶有文本:“ Export Inventury”)時,單擊事件myButton_ServerClick將不會出現。 僅網頁刷新。 我已經准備好了一些答案,但我想不出如何輕松地解決此問題。
如果您觸發* myButton_ServerClick *事件,則會調用回發並且ASP.Net希望觸發該事件,但是您的控件未添加到頁面中,這就是ASP.Net忽略此事件的原因。
在回發之后和要觸發的事件之前,必須再次添加控件,在它們之后,將調用event。
更新資料
像這樣
頁:
<asp:Button runat="server" ID="btnTest" Text="Add control" OnClick="btnTest_Click"/>
<asp:Label runat="server" ID="result"></asp:Label>
<asp:HiddenField runat="server" ID="controlLoaded"/>
<asp:PlaceHolder runat="server" ID="phTest"></asp:PlaceHolder>
后面的代碼:
protected void Page_Load(object sender, EventArgs e)
{
if (controlLoaded.Value == "1")
{
AddControl();
}
}
protected void btnTest_Click(object sender, EventArgs e)
{
AddControl();
}
protected void myButton_ServerClick(object sender, EventArgs e)
{
result.Text = "OK";
}
public object getControl()
{
var ph = new PlaceHolder();
var exportInbBtn = new Button();
exportInbBtn.Text = "Export Inventury";
exportInbBtn.Click += new EventHandler(myButton_ServerClick);
ph.Controls.Add(exportInbBtn);
exportInbBtn.ID = "exportInbBtn";
return ph;
}
private void AddControl()
{
var actualObject = (PlaceHolder)getControl();
phTest.Controls.Add(actualObject);
controlLoaded.Value = "1";
}
請注意,通過以下方法添加了UserControls-//首先創建用戶控件的實例var control = Page.LoadControl(“〜/ folder1 / UserControl1.ascx”)
//現在將此控件添加為占位符-placeHolder1.Controls.Add(control);
我希望這有幫助。
page.aspx
<asp:PlaceHolder ID="PlaceHolder1" runat="server" ></asp:PlaceHolder>
page.aspx.vb
Private Sub CreateControl()
Dim vw As Control
vw = CType(LoadControl("~/View01.ascx"), View01)
vw.ID = "View_Dyn"
PlaceHolder1.Controls.Clear()
PlaceHolder1.Controls.Add(vw)
End Sub
每次回發都重新創建
Private Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
CreateControl()
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.