在回发期间启用/禁用 Asp.net Image 按钮

Posted

技术标签:

【中文标题】在回发期间启用/禁用 Asp.net Image 按钮【英文标题】:Enable/Disable Asp.net Image button during postback 【发布时间】:2011-09-23 13:37:43 【问题描述】:

我正在尝试检查database 中的用户是否为available,因为我保留了一个名为“Check availability”的按钮。当用户单击时,他可以检查该名称是否存在于数据库中如果“存在”,则将文本框背景颜色更改为红色,如果不存在,则将文本框背景颜色更改为“绿色”

现在我有一个注册页面,如果用户存在,则用户填写表单我需要禁用 SignUp button,我正在使用“Image button”。

所以发生的情况是我无法在用户可用时禁用它。 当我在页面加载期间禁用图像按钮(即注册按钮)时,在用户填写表单后,尽管用户可用,但页面正在刷新并将信息作为 duplicate field 提交到数据库。

这些是我制定的许多方法,但没有一个适合我。

.enabled = true;

.disabled = false;

document.getElementById('<%= button.ClientID %>').disabled = true;
document.getElementById('<%= button.ClientID %>').disabled = false;

$('#ButtonId').prop("disabled", true); ->> disabled
$('#ButtonId').prop("disabled", false); ->> Enabled

这是我的代码:

<script type="text/javascript">
    $(function () 
        $("#<% =btnavailable.ClientID %>").click(function () 
            if ($("#<% =txtUserName.ClientID %>").val() == "") 
                $("#<% =txtUserName.ClientID %>").removeClass().addClass('notavailablecss').text('Required field cannot be blank').fadeIn("slow");

             else 
                $("#<% =txtUserName.ClientID %>").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow");
                $.post("LoginHandler.ashx",  uname: $("#<% =txtUserName.ClientID %>").val() , function (result) 
                    if (result == "1") 

                        $("#<% =txtUserName.ClientID %>").addClass('notavailablecss').fadeTo(900, 1);
                      document.getElementById('<%= btnSignUp.ClientID %>').enabled = false;
                    
                    else if (result == "0") 
                        $("#<% =txtUserName.ClientID %>").addClass('availablecss').fadeTo(900, 1);
                        document.getElementById('<%= btnSignUp.ClientID %>').enabled = true;
                    
                    else 
                        $("#<% =txtUserName.ClientID %>").addClass('notavailablecss').fadeTo(900, 1);

                    
                );
            
        );

        $("#<% =btnavailable.ClientID %>").ajaxError(function (event, request, settings, error) 
            alert("Error requesting page " + settings.url + " Error:" + error);
        );
    );
</script>

这是我的处理程序代码:

Public Class LoginHandler : Implements IHttpHandler

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

    Dim uname As String = context.Request("uname")
    Dim result As String = "0"
    If uname IsNot Nothing Then
        result = CheckUnAvailable(uname)
    End If
    context.Response.Write(result)
    context.Response.[End]()
End Sub
Public Function CheckUnAvailable(ByVal name As String) As String
    Dim result As String = "0"
    Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("HDIConnectionString").ConnectionString)
    Try
        con.Open()
        Dim com As New SqlCommand("Select Username from Registration where Username=@UserName", con)
        com.Parameters.AddWithValue("@UserName", name)
        Dim uname As Object = com.ExecuteScalar()
        If uname IsNot Nothing Then
            result = "1"
        End If
    Catch
        result = "error"
    Finally
        con.Close()
    End Try
    Return result
End Function
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
    Get
        Return False
    End Get
End Property

检查可用性的更新代码点击:

  If txtUserName.BackColor = Drawing.Color.Red Then
        btnSignUp.Enabled = False
    ElseIf txtUserName.BackColor = Drawing.Color.Green Then
        btnSignUp.Enabled = True
    End If

【问题讨论】:

我不知道这是否会对您有所帮助,但在我的一个项目中,我们开发了一个脚本,它可以防止按钮发送多个回发。基本上它做了什么,它重写了 href 属性中的javascript,这样无论你点击多少次,都只会发送一个回发。我对您的建议是实施类似的行为 - 如果用户单击“检查可用性”按钮,则暂时从表单按钮中删除回发 javascript,并在您的请求完成后,将回发 javascript 放回原处。 是的,我同意刚才我在网上搜索相同的内容。它是为了重新提交相同的详细信息,但在我的情况下,用户搜索名称并发现它不可用,他尝试提交表单并接受,但当时我需要禁用。 是的,正如我在更新的代码中显示的那样,我已禁用,但它没有发生。 【参考方案1】:

如果按钮是 Asp.Net 按钮:

$('#<%= button.ClientID %>').prop("disabled", true);

或者……

$("[id$=ButtonId]").prop("disabled", true);

【讨论】:

注意:.prop 是 jQuery 的一个相当新的特性。您使用的是 1.6.x 吗? 这是一个 ImageButton 但它也接受这个并更新数据。 我相信 .prop 是 1.6.x 的功能。升级或不要在 1.4 中使用 .prop。 即使我使用 1.6 以上的版本也没有任何反应。【参考方案2】:

尝试使用:disabled=disabled

编辑

试试:$('#ButtonId').removeProp("disabled");

【讨论】:

以上是关于在回发期间启用/禁用 Asp.net Image 按钮的主要内容,如果未能解决你的问题,请参考以下文章

asp.net sessionID 在回发时更改?

asp .net背景图像在回发时闪烁

动态创建的 asp.net 控件在回发后消失

asp.net bootstrap 在回发事件后保持当前活动选项卡

如何在回发 ASP.Net Core 后保持选项卡处于活动状态

如何避免在回发时从 asp.net 重复输入?