C# 在ASP.NET c上禁用回发按钮#
这是我正在做的一个例子C# 在ASP.NET c上禁用回发按钮#,c#,asp.net,C#,Asp.net,这是我正在做的一个例子 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:按钮正在进行回发,同
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);
}
如果您是正确的,您必须在回发后将新项目添加到面板中。这是.NET管道的性质 如果使用数据绑定控件(如中继器)来显示面板内容,则按钮单击处理程序只需重新绑定控件即可正常工作。您可以使用
<asp:LinkButton OnClientClick="javascript:addItemsToPanel();return false;"
您也可以尝试以下方法:
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)
}
}
如果要将控件动态添加到面板中,则必须在每次回发时重新创建控件,并确保为控件分配相同的ID,以便ViewState可以填充值。通常最好在OnInit
期间重新创建动态内容,但在某些情况下这可能很困难
我最喜欢的工具之一是DynamicControlsPlaceHolder
,因为您可以向其中添加动态控件,它将自动保存这些控件,而无需在页面上进行任何额外的编码。只需向其中添加控件,其余的工作就可以完成
以下是链接:
要防止按钮执行回发,请使用OnClientClick
并返回false
OnClientClick="return false;"
你可以这样做
ASPX code:
<asp:LinkButton ID="someID" runat="server" Text="clicky"></asp:LinkButton>
呈现为HTML的是:
<a onclick="return false;" id="someID" href="javascript:__doPostBack('someID','')">clicky</a>
将asp:Button更改为asp:LinkButton解决了我的问题。我认为,最好使用Ajax更新面板。并将您的按钮放入其中
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button1" />
</ContentTemplate>
</asp:UpdatePanel>
感谢您的回复。是否有我可以调用的c#命令,您需要将中继器控件放置在面板中,并通过设置数据源并调用.DataBind()将其绑定到您的数据关于repeater.4GuysFromRolla有几篇关于使用repeater控件的好文章。不使用repeater控件。我通过sql.Name和ID从数据库中获取两个变量。我认为使用这些名称和ID将复选框附加到面板。如果可能的话,您应该使用数据绑定控件执行此操作。有一个复选框列表控件你可以看看。使用哪个对不起。你的帖子上显示的都是“你可以使用”这不是客户端吗?我需要将函数设置为seversidePage。IsPostBack是您的朋友。面板上的viewstate对此我无能为力?我在页面加载中尝试了这一点,但仍然无法获得所需的结果。请查看我的编辑。真是太棒了!谢谢!嘿,詹姆斯!非常感谢我完成了这项工作,您为我节省了一个音调头痛!只是好奇,你有没有在lets say上测试过这一点,比如说每天有500个帖子?我想知道这是否会滥用viewstate,从而造成大量过载。再次感谢m8!嘿@James-DynamicControlsPlaceholder工具在2014年仍然相关/必要吗?只是好奇,因为我正在与动态控件和如果它仍然可用,我希望能得到任何帮助。@ChrisEmerson:这取决于你在构建什么。如果你在做Web表单开发,肯定还有一些应用程序使用这样的控件非常有用。如果可以,我建议使用JavaScript,但对于那些不使用JavaScript的领域,这个控件可以通过添加OnClientClick=“return false;”在你的HTML中,OnClick事件将有缺陷。谢谢,我今晚晚些时候也会尝试一下。目前我使用的是已接受的答案,但看起来DynamicPlaceHolder正在使用视图状态进行保存…谢谢你的回复。虽然我认为这不能编辑,但可以使用c#服务器端函数以及执行类似操作“返回错误”…可以吗?
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button1" />
</ContentTemplate>
</asp:UpdatePanel>