在回发期间启用/禁用 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 bootstrap 在回发事件后保持当前活动选项卡