我有一个复杂的业务应用程序,用户希望我验证单个文本框条目。我正在使用OnChanged事件来触发PostBack并针对各种其他字段值执行业务规则验证。问题是用户在文本框中键入值,然后单击其他文本框。 OnChanged事件按预期触发,但我很难获得他们点击的(不同)控件。我尝试将一些Javascript添加到其他控件中的OnFocus事件,并将控件名称/ ID保存在隐藏字段中。我有一个测试警报,指示隐藏字段确实在OnChanged回发之前更新,但隐藏字段值在OnChanged回发中没有更新的值。如果我做了一些事情来触发第二次回发,则隐藏字段具有值。
我要么让这个方法工作,要么可能有另一个解决方案来找到他们从其他控件OnChanged事件中点击的控件。请帮忙。
请不要提出jquery建议;项目不允许jquery。
您可以在每个TextBox上添加onFocusIn
侦听器。然后将焦点TextBox的ID添加到HiddenField并在PostBack上读取。
<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox_TextChanged"
onFocusIn="setFocusedControlValue(this)" AutoPostBack="true"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" OnTextChanged="TextBox_TextChanged"
onFocusIn="setFocusedControlValue(this)" AutoPostBack="true"></asp:TextBox>
<asp:HiddenField ID="HiddenField1" runat="server" />
<script type="text/javascript">
function setFocusedControlValue(control) {
document.getElementById('<%=HiddenField1.ClientID %>').value = control.id;
}
</script>
代码背后
protected void TextBox_TextChanged(object sender, EventArgs e)
{
Label1.Text = HiddenField1.Value;
}
但是,TextChanged
事件也会在页面上的任何其他位置单击时触发PostBack,在这种情况下,您将没有下一个TextBox的ID。