这是我正在做的事情的一个例子
Page Load
{
//Adds items to a panel (not an updatepanel just a normal panel control)
}
protected void btnNexMod_Click(object sender, EventArgs e)
{
// Calls DoWork() and Appends more items to the same panel
}
我的问题是asp:按钮正在进行回发以及调用DoWork()
因此,重新调用我的页面加载,重新初始化我的面板:(
我希望我添加到面板中的项目留在那里!
所有的帮助表示赞赏,而不是寻找你的答案。感谢任何步骤!
以下是我的问题的确切示例。
protected void Page_Load(object sender, EventArgs e)
{
CheckBox chkbox = new CheckBox();
chkbox.Text = "hey";
chkbox.ID = "chk" + "hey";
// Add our checkbox to the panel
Panel1.Controls.Add(chkbox);
}
protected void Button1_Click(object sender, EventArgs e)
{
CheckBox chkbox = new CheckBox();
chkbox.Text = "hey";
chkbox.ID = "chk" + "hey";
// Add our checkbox to the panel
Panel1.Controls.Add(chkbox);
}
页面上只有一个空面板和一个带有此单击偶数处理程序的按钮。
我也试过这个但它仍然不起作用。现在清除附加到面板的初始项目。
if (!Page.IsPostBack) // to avoid reloading your control on postback
{
CheckBox chkbox = new CheckBox();
chkbox.Text = "Initial";
chkbox.ID = "chk" + "Initial";
// Add our checkbox to the panel
Panel1.Controls.Add(chkbox);
}
答案 0 :(得分:9)
如果要动态地向Panel添加控件,则必须在每次回发时重新创建控件,并确保为控件分配相同的ID,以便ViewState可以填充值。通常最好在OnInit
期间重新创建动态内容,但在某些情况下这可能很难。
我最喜欢的工具之一是DynamicControlsPlaceHolder
,因为您可以为其添加动态控件,它会自动保留它们,而无需在页面上进行任何其他编码。只需添加控件,它就会完成剩下的工作。
这是链接:
http://www.denisbauer.com/Home/DynamicControlsPlaceholder
至于阻止按钮执行回发,请使用OnClientClick
并返回false。
OnClientClick="return false;"
答案 1 :(得分:4)
您可以使用
<asp:LinkButton OnClientClick="javascript:addItemsToPanel();return false;"
因此使用javascript函数添加它们。这就是我解决这个问题的方法。
答案 2 :(得分:3)
你也可以试试这个:
Page Load
{
if (!this.IsPostBack) // to avoid reloading your control on postback
{
//Adds items to a panel (not an updatepanel just a normal panel control)
}
}
答案 3 :(得分:2)
ASPX code:
<asp:LinkButton ID="someID" runat="server" Text="clicky"></asp:LinkButton>
代码背后:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
someID.Attributes.Add("onClick", "return false;");
}
}
HTML呈现的是:
<a onclick="return false;" id="someID" href="javascript:__doPostBack('someID','')">clicky</a>
答案 4 :(得分:0)
你是对的,你必须在PostBack后将新项目添加到Panel。这就是.NET管道的本质。
如果使用数据绑定控件(如Repeater)来显示面板内容,则按钮单击处理程序只需重新绑定控件即可正常运行。
答案 5 :(得分:0)
将asp:Button更改为asp:LinkButton解决了我的问题。
答案 6 :(得分:0)
我认为,最好使用Ajax Update面板。然后按下按钮。
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button1" />
</ContentTemplate>
</asp:UpdatePanel>