Pep*_*tal 1 c# asp.net user-controls master-pages placeholder
在我的ASP.Net页面中,我有PlaceHolder和Button.当用户单击此按钮时,我将一些UserControls从我的接口方法getControl添加到PlaceHolder.码:
protected void ActionBtn_Click(object sender, EventArgs e)
{
if (provider != null)
{
actualObject = (PlaceHolder)provider.getControl();
PlaceHolder1.Controls.Add(actualObject);
}
}
Run Code Online (Sandbox Code Playgroud)
方法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;
}
Run Code Online (Sandbox Code Playgroud)
方法ASP页面中的Page_Load和Page_Init为空.问题是,当用户单击按钮exportInbBtn(带有文本:"Export Inventury")时,单击事件myButton_ServerClick将不会上升.只有网页刷新.我准备了一些答案,但我不知道如何轻松解决这个问题.
如果您触发*myButton_ServerClick*事件,则会调用回发并且ASP.Net想要触发调用事件,但是您的控件未添加到页面中,这就是ASP.Net忽略此事件的原因.
在回发之后和要触发的事件之前,您必须再次添加控件,然后在它们之后调用事件.
更新
像这样的东西
页:
<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>
Run Code Online (Sandbox Code Playgroud)
代码背后:
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";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22043 次 |
| 最近记录: |