使用ASP.NET OnTextChanged触发事件

时间:2015-05-12 14:04:54

标签: c# asp.net

我有asp:TextBox

<asp:TextBox ID="usernameInput" runat="server" 
AutoPostBack="true" OnTextChanged="NameChanged"></asp:TextBox>

并希望每当文本框内的文字发生变化时,都会在C#中回复CodeBehind。我知道我需要对文本框进行疏散以解雇事件。我感觉OnTextChanged不应该在asp:TextBox标记中,但在示例中看到这一点很多。

    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //Adding the event handler manually does not help either.
            usernameInput.TextChanged += new EventHandler(NameChanged);
        }

        public void NameChanged(Object sender, EventArgs e)
        {
            Debug.WriteLine("Text Changed"); //Having a breakpoint here that has never been reached.

        }
    }

那么为什么一旦盒子失去焦点并且它的价值发生了变化,它就不会被解雇?

aspx标题:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="~/Index.aspx.cs" Inherits="TestProject.Index" %>

这是完整的表格:

<form id="signIn" runat="server">
                <p>Username</p>
                <asp:TextBox ID="usernameInput" runat="server" AutoPostBack="true" CausesValidation="false" OnTextChanged="usernameInput_TextChanged"></asp:TextBox>
                <p>Password</p>
                <asp:TextBox ID="passwordInput" TextMode="Password" runat="server" />
                <p>E-mail</p>
                <asp:TextBox ID="emailInput" TextMode="Email" CausesValidation="false" runat="server" /><br /><br />
                <asp:CheckBox ID="termsInput" runat="server" /><span style="font-size:10px;">I accept the Terms and Conditions.</span><br /><br />
                <asp:Button ID="submit" Text="PLAY" OnClick="ProcessSignIn" runat="server" />
            </form>

当前事件处理程序:

public void usernameInput_TextChanged(object sender, EventArgs e)
        {
            Debug.WriteLine("Text changed!");
        }

使用此设置,单击提交按钮时会触发事件处理程序。看起来好像AutoPostBack被设置为假。

3 个答案:

答案 0 :(得分:0)

ASP.NET

usernameInput.Attributes.Add("onchange","javascript:usernameInput_changeHandler()");

的Javascript

<script type="text/javascript">
function usernameInput_changeHandler()
{
//client side JS code
}
</script>

<强>更新#1

如果您需要调用C#方法,则需要将其定义为WebMethod

CS档案

[WebMethod]
public void FunctionName()
{
    //Your .NET code
}

ASPX文件

<script type="text/javascript">
function usernameInput_changeHandler() 
{
    PageMethods.Name(SuccessFunction, FailureFunction);
}
function SuccessFunction(result) {
    alert(result);
}
function FailureFunction(error) {
    alert(error);
}
</script>

...

<asp:TextBox ID="usernameInput" runat="server" AutoPostBack="true" CausesValidation="false" OnClientClick="usernameInput_changeHandler();return false;"></asp:TextBox>

答案 1 :(得分:0)

将处理程序分配移至Page Init。

protected void Page_Init()
        {
            usernameInput.TextChanged += new EventHandler(NameChanged);
        }

OR 在aspx Markup for Your TextBox中添加它

OnTextChanged="NameChanged" 

答案 2 :(得分:0)

我找到了正确答案,但这给了我严重的头部伤害。

我找不到名为asp:Button的{​​{1}}的{​​{1}},它可能是保留的,并在某处发生错误。会喜欢更好的解释。

我开始了一个非常基本的测试实现,并且有效。幸运的是,当我重建我的代码时,我还没有添加按钮,一旦我用ID完全相同的值停止工作。一旦我改变了submit,我就开始在失去对ID的关注时开始回电。

相关问题