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 = &quot;Get_UserName&quot;;
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue(&quot;@userName&quot;, userName);
            command.Connection = connection;

            SqlDataReader reader = command.ExecuteReader();
            if (reader.HasRows)
            {
                lblUserNameError.Text = &quot;Alredy Exist&quot;;
                lblUserNameError.Visible = true;
                btnSave.OnClientClick = &quot;return false;&quot;;
            }
            else
            {
                lblUserNameError.Visible = false;
                btnSave.OnClientClick = &quot;return true;&quot;;
            }
        }
        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();
        }
    }