禁用ASP按钮上的回发.净c#

本文关键字:ASP 按钮 禁用 | 更新日期: 2023-09-27 18:13:03

这是我正在做的一个例子

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);
}

禁用ASP按钮上的回发.净c#

如果你动态地向Panel添加控件,那么你必须在每次回发时重新创建控件,并确保为控件分配相同的id,以便ViewState可以填充值。通常最好在OnInit期间重新创建动态内容,但在某些情况下这可能很困难。

我最喜欢的工具之一是DynamicControlsPlaceHolder,因为你可以向它添加动态控件,它会自动持久化它们,而不需要在页面上进行任何额外的编码。只要给它添加控件,它就会完成其余的工作。

链接:
http://www.denisbauer.com/Home/DynamicControlsPlaceholder

为了防止按钮执行回发,使用OnClientClick并返回false。

OnClientClick="return false;"

你可以使用

<asp:LinkButton OnClientClick="javascript:addItemsToPanel();return false;" 

因此使用javascript函数来添加它们。这就是我解决这个问题的方法

你也可以试试这个:

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)
    }
}

你可以这样做…

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>

您是正确的,您必须在PostBack之后将新项目添加到Panel中。这就是。net管道的本质。

如果您使用数据绑定控件(如Repeater)来显示面板内容,那么按钮单击处理程序只需要重新绑定控件,就可以正常工作了。

将asp:Button更改为asp:LinkButton解决了我的问题。

我认为,最好使用Ajax Update面板。然后把你的按钮放进去。

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button1" />
        </ContentTemplate>
    </asp:UpdatePanel>