检测控制用户在其他控件OnChanged事件期间单击

问题描述 投票:0回答:1

我有一个复杂的业务应用程序,用户希望我验证单个文本框条目。我正在使用OnChanged事件来触发PostBack并针对各种其他字段值执行业务规则验证。问题是用户在文本框中键入值,然后单击其他文本框。 OnChanged事件按预期触发,但我很难获得他们点击的(不同)控件。我尝试将一些Javascript添加到其他控件中的OnFocus事件,并将控件名称/ ID保存在隐藏字段中。我有一个测试警报,指示隐藏字段确实在OnChanged回发之前更新,但隐藏字段值在OnChanged回发中没有更新的值。如果我做了一些事情来触发第二次回发,则隐藏字段具有值。

我要么让这个方法工作,要么可能有另一个解决方案来找到他们从其他控件OnChanged事件中点击的控件。请帮忙。

请不要提出jquery建议;项目不允许jquery。

javascript c# asp.net
1个回答
1
投票

您可以在每个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。

© www.soinside.com 2019 - 2024. All rights reserved.