我正在使用VB.NET和Webforms与MS AJAX。
我在MS AJAX更新面板中有一个按钮。加载页面时,按钮的可见性以声明方式设置为“false”。
用户选中一个复选框(也在UpdatePanel中)后,我将按钮的可见性设置为true,它会按预期显示。
然而,用户必须两次点击该按钮才能发生任何事情。第一次点击只是将焦点放在按钮上。需要再次单击才能使回发发生(通过视觉和断点验证)
知道为什么会这样吗?
非常感谢!
安东尼
答案 0 :(得分:4)
您是否在页面上有动态显示验证器?
如果显示验证器并且您在按钮上按下鼠标,则验证器可以从鼠标下方按下按钮,因此当您抬起手指时实际上不会触发点击事件。
如果是这种情况,您可以通过将验证程序的显示属性设置为静态来解决此问题。
其他想法:
按钮的客户端是否有任何javascript运行onclick,onmousedown,onmouseup?
您是否动态地将此按钮添加到页面?
您是否将CheckBox
的{{1}}媒体资源设为AutoPostBack
或True
?如果设置为true,则在单击按钮时可能处于异步回发的中间。
答案 1 :(得分:0)
我在IE6和Firefox 3.5中对此进行了测试,它对我来说很好用。你的配置有所不同吗?
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" OnCheckedChanged="CheckBox1_CheckedChanged" Text="Checkbox" />
<asp:Button ID="Button1" runat="server" Text="Button" Visible="False" OnClick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
protected void CheckBox1_CheckedChanged( object sender, EventArgs e )
{
Button1.Visible = CheckBox1.Checked;
}
protected void Button1_Click( object sender, EventArgs e )
{
Label1.Text = DateTime.Now.ToString();
}
答案 2 :(得分:0)
狂野猜测:您是否检查了页面的Init或Load阶段中复选框的值?由于页面循环,复选框控件将不会设置其重新发布的值,并且将显示为未选中。只有在第二个回发中,您的代码才会正确地看到已检查状态(从视图状态加载)并显示该按钮。
在复选框中更改事件或在PreRender中设置可见性。
答案 3 :(得分:0)
感谢您的意见。
我在UpdatePanel中有一个3rd Party File Upload control和按钮,这似乎与按钮冲突。
我已经使用javascript解决了这个问题。我在页面顶部附近添加了以下方法:
<script language="javascript" type="text/javascript">
function DisplayImportButton() {
document.getElementById('<%= btnImport.ClientId %>').style.visibility = "visible";
}
</script>
我将以下内容添加到页面底部,因此按钮始终隐藏在开头:
<script language="javascript" type="text/javascript">
var elem;
elem = document.getElementById('<%= btnImport.ClientId %>');
if (elem) {
elem.style.visibility = "hidden";
}
</script>
在更改复选框已检查状态的处理程序中,我添加了:
ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "ImportButtonScript", _
"DisplayImportButton();", True)
亲切的问候