我有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
被设置为假。
答案 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
的关注时开始回电。