C# 如何阻止或禁用按钮';是否在textchanged事件上回发?
对于我的“用户名”字段,我正在检查存在的名称,如果存在,那么将在标签中抛出一个错误。那么如何禁用按钮的单击事件或回发C# 如何阻止或禁用按钮';是否在textchanged事件上回发?,c#,C#,对于我的“用户名”字段,我正在检查存在的名称,如果存在,那么将在标签中抛出一个错误。那么如何禁用按钮的单击事件或回发 protected void txtUserName_TextChanged(object sender, EventArgs e) { try { string userName = txtUserName.Text; if (connection.State == ConnectionState.Closed
protected void txtUserName_TextChanged(object sender, EventArgs e)
{
try
{
string userName = txtUserName.Text;
if (connection.State == ConnectionState.Closed)
connection.Open();
command = new SqlCommand();
command.CommandText = "Get_UserName";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@userName", userName);
command.Connection = connection;
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
lblUserNameError.Text = "Alredy Exist";
lblUserNameError.Visible = true;
//btnSave.Enabled = false;
//btnSave.onClientClick="return false";
someID.Attributes.Add("onClick", "return false;");
}
else
{
lblUserNameError.Visible = false;
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally //Close db Connection if it is open....
{
if (connection.State == ConnectionState.Open)
connection.Close();
}
}
通过以上三种方式,我仍然可以通过点击按钮返回页面。您可以使用
YourTargetButton.Enabled=false代码>
if (reader.HasRows)
{
lblUserNameError.Text = "Alredy Exist";
lblUserNameError.Visible = true;
YourTargetButton.Enabled = false;
}
如果btnSave.Enabled=false
是否在if
语句中,而不是else
语句中?
在我看来,如果找不到相同的用户名,您现在正在禁用该按钮。在使用函数时:btnSave.Enabled=false代码>,在触发文本更改事件后,是否在HTML页面中禁用该按钮?
但是,您可以使用此解决方案:
<script type="text/javascript">
$(document).ready(function () {
if ($('#<%=Label1.ClientID%>').is(":visible")) {
$('#<%=btnSave.ClientID%>').attr('disabled', 'disabled');
}
else {
$('#<%=btnSave.ClientID%>').removeAttr('disabled');
}
});
</script>
$(文档).ready(函数(){
如果($(“#”)是(“:可见”)){
$('#').attr('disabled','disabled');
}
否则{
$(“#”).removeAttr('disabled');
}
});
应将脚本添加到包含btnSave的页面中
您应该将
添加到头标签中:
我不知道是否是这种情况,但如果您的文本框也在UpdatePanel中,则按钮必须在UpdatePanel中,否则将无法刷新
另外,您可以发布控件声明吗?我的文本框位于UpdatePanel内。按钮必须位于UpdatePanel内,否则将无法刷新
<asp:updatepanel id="uptxtUserName" runat="server" xmlns:asp="#unknown"><contenttemplate>
<asp:textbox id="txtUserName" runat="server" tabindex="8" autopostback="true">
ontextchanged="txtUserName_TextChanged"></asp:textbox>
<asp:label id="lblUserNameError" runat="server" visible="false" forecolor="Red"></asp:label>
<asp:requiredfieldvalidator id="reqUName" controltovalidate="txtUserName" errormessage="Required" class="error" runat="server" forecolor="Red">
</asp:requiredfieldvalidator>
</contenttemplate>
<triggers>
<asp:asyncpostbacktrigger controlid="txtUserName" eventname="TextChanged" />
<asp:asyncpostbacktrigger controlid="btnSave" eventname="Click" />
<asp:asyncpostbacktrigger controlid="btnCancel" eventname="Click" />
</triggers>
</asp:updatepanel>
<pre lang="xml"><asp:UpdatePanel ID="upbtnSave" runat="server"><ContentTemplate>
<asp:Button ID="btnSave" Text="Save" runat="server" TabIndex="31" class="btn btn-success" onclick="btnSave_Click"></asp:Button>
<asp:Button ID="btnCancel" Text="Cancel" CausesValidation="false" runat="server" TabIndex="32" class="btn" onclick="btnCancel_Click"></asp:Button>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btnCancel" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="txtUserName" EventName="TextChanged" />
</Triggers>
</asp:UpdatePanel>
我已经试过了。但是它仍然会发回。试试这个:YourTargetButtonId.Attributes.Add(“onClick”,“return false;”);我试过alredy,但它仍然会回发,编辑了我上面的代码。你的txtUserName\u TextChanged会回发吗?按钮的属性只会在回发时更改。为此,需要哪些jquery库文件?是的,插入,并且它使用jquery的函数。您的意思是必须使用它是可以的。我尝试过使用它,但仍然可以回发。”调试器$(document).ready(函数(){if($('#').is(“:visible”){$('#').attr('disabled','disabled');}else{$('#').removeAttr('disabled');});'
protected void txtUserName_TextChanged(object sender, EventArgs e)
{
try
{
string userName = txtUserName.Text;
if (connection.State == ConnectionState.Closed)
connection.Open();
command = new SqlCommand();
command.CommandText = "Get_UserName";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@userName", userName);
command.Connection = connection;
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
lblUserNameError.Text = "Alredy Exist";
lblUserNameError.Visible = true;
btnSave.OnClientClick = "return false;";
}
else
{
lblUserNameError.Visible = false;
btnSave.OnClientClick = "return true;";
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally //Close db Connection if it is open....
{
if (connection.State == ConnectionState.Open)
connection.Close();
connection.Close();
command.Dispose();
}
}