引起的Web应用程序在ASP.NET
问题描述:
一个TextBox
进入文本框项如何检测回发会导致按下TextChanged
事件时输入,但只有当文本已经改变。引起的Web应用程序在ASP.NET
如果文本没有改变时输入被按下,回传仍然存在,但TextChanged
事件不会。
我想知道是否有可能确定输入在文本框中被按下并导致回发,即。有没有像下面这样的东西?
protected void Page_Load(object sender, EventArgs e) {
if (sender.reasonControlName == "MyTextBox" &&
sender.reasonControlKey == keyEnter) {
handleEnterKey();
}
}
ASP.Net 4
注意,这不是一个有关如何禁用造成在Web应用程序中的一个TextBox ENTER键回传,例如问题stackoverflow.com/questions/4209903
还有一个解决方法,使用面板和DefaultButton stackoverflow.com/questions/12072281,但这似乎有点混乱。
答
文本框,其中输入压可以被存储在一个隐藏字段的ID:
<asp:TextBox ID="txtBox1" runat="server" onkeydown="keyPressed(event, 'txtBox1');" ... />
<asp:TextBox ID="txtBox2" runat="server" onkeydown="keyPressed(event, 'txtBox2');" ... />
<asp:HiddenField ID="hiddenEnterPressed" runat="server" />
<script>
function keyPressed(e, id) {
if (e.keyCode == 13) {
document.getElementById('hiddenEnterPressed').value = id;
}
}
</script>
注:onkeydown
事件可以被定义为keyPressed(event, this.id)
但随后的(可能)受到损坏的ID将是保存在隐藏的领域;硬编码原始ID可以使事情变得更简单。
TextBox控件可以在代码隐藏检索:
Control mainCtrl = Master.FindControl("MainContent");
TextBox txtBox = mainCtrl.FindControl(hiddenEnterPressed.Value) as TextBox;
隐藏字段应该在每次回发复位:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
hiddenEnterPressed.Value = "";
}
@ConnersFan这个解决办法似乎更多的工作不是将在一个面板中使用'DefaultButton'来触发一个回传,但将它记录在这里是非常有用的。 – Matt