禁用ASP.NET按钮的回发

4

我的想法是当用户未登录时,他将无法将商品添加到购物车中,因此我所做的是:

<asp:Button ID="BTNAddToCart" runat="server" Text="Add to cart" class="btn btn-info btn-lg" style="display: inline; margin: auto; display: block; visibility: hidden;"  OnClick="BTNAddToCart_Click" /> 

然后在代码后台:

if (Session["User"] == null)
{
    BTNAddToCart.Attributes["class"] = "btn btn-info btn-lg disabled";
    BTNAddToCart.Attributes.Add("title", "Error");  
    BTNAddToCart.Attributes.Add("data-toggle", "popover");
    BTNAddToCart.Attributes.Add("data-trigger", "hover");
    BTNAddToCart.Attributes.Add("data-placement", "bottom");
    BTNAddToCart.Attributes.Add("data-content", "You must be loged in to add items to the cart");  
}

您可以看到,通过使用Bootstrap,我使按钮看起来无法点击,但实际上它仍然是可点击的。

因此,我认为如果禁用按钮的回发,它就真的无法被点击。

如何禁用按钮的回发?

我尝试过:

<asp:Button ID="BTNAddToCart" runat="server" Text="Add to cart" class="btn btn-info btn-lg" style="display: inline; margin: auto; display: block; visibility: hidden;" OnClientClick="BTNJavaScriptClick()" OnClick="BTNAddToCart_Click" />



<script>  

function BTNJavaScriptClick()
{
    var ButtonAdd = document.getElementById("BTNAddToCart");
    if (ButtonAdd.className == "btn btn-info btn-lg disabled") 
        return false;
}

 </script>   

我甚至尝试了BTNAddToCart.Enabled = false;,它可以正常工作,但会使我的弹出窗口消失。

2个回答

3
您可以将asp.net属性 Enable 设置为false,按钮就不会回传。
BTNAddToCart.Enabled = false;

当一个元素被disabled(禁用)时,您可以使用CSS中的disabled样式来给它带来所需的外观。下面是一个简单的示例:

input:disabled {
    background: #444;
}

相对于那个问题: 如何使用 CSS 样式来美化禁用状态的输入框


还有一件事,通过这样做,它取消了我给按钮(弹出窗口)设置的“样式”,我该如何让它们两个都起作用? - harel486
@harel486 请查看在CSS中使用 :disabled 的样式 http://www.w3schools.com/cssref/sel_disabled.asp 如果对您有用,请投票并接受答案。 - Aristos
事情是,在使用“BTNAddToCart.Enabled = false;”之后,我无法通过后台代码更改类... - harel486
@harel486 是的,你可以这样做,但因为它被禁用了,会遵循CSS上的其他设置。只需让类保持原样,以查看发生了什么-Bootstrap会处理禁用的元素。 - Aristos
你能否通过编写一些CSS代码来展示给我吗?如果“BTNAddToCart.Enabled = true;”,我希望弹出式窗口能够正常工作。 - harel486
@harel486 我已经给你写了一个示例并提供了2个链接。在Bootstrap中,让它工作起来可能会更加困难,但是尝试一下,你会发现它很有用。 - Aristos

1
如果你想让鼠标悬停在按钮上时触发反应(例如显示提示信息),而不希望单击按钮触发回传,可以采取以下方法:
  • 保持按钮启用
  • 使用BootStrap样式将按钮显示为禁用状态
  • 通过在OnClientClick中返回false来阻止回传
  • 防止按钮获得焦点
代码如下:
if (Session["User"] == null)
{
    BTNAddToCart.CssClass = "btn btn-info btn-lg disabled";
    BTNAddToCart.OnClientClick = "return false;";
    BTNAddToCart.Attributes.Add("onfocus", "this.blur();");
    ...
}

我真的很喜欢你!我已经坐了几个小时了! - harel486

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接