C# 自动回邮功能后,将焦点设置回正确的文本框

C# 自动回邮功能后,将焦点设置回正确的文本框,c#,asp.net,textbox,autopostback,C#,Asp.net,Textbox,Autopostback,现在,这可能看起来是重复的,但它不是。 互联网上的每一个解决方案都向您展示了如何关注触发事件的文本框 但如果用户按tab键呢?应该具有焦点的文本框是下一个文本框。 因此,我们做了一个变通方法,重点关注TabIndex高于触发事件的文本框 但是如果用户按下Shift+tab会怎样呢? 更糟糕的是:如果用户点击另一个随机文本框怎么办 这就是问题所在。 我认为这里不需要代码,因为这是一个通用的解决方案,可以将焦点设置在具有自动回邮功能的文本框上。 如果需要代码,请在注释中询问 尝试,在服务器端使用Se

现在,这可能看起来是重复的,但它不是。
互联网上的每一个解决方案都向您展示了如何关注触发事件的文本框

但如果用户按tab键呢?应该具有焦点的文本框是下一个文本框。
因此,我们做了一个变通方法,重点关注TabIndex高于触发事件的文本框

但是如果用户按下Shift+tab会怎样呢?
更糟糕的是:如果用户点击另一个随机文本框怎么办

这就是问题所在。
我认为这里不需要代码,因为这是一个通用的解决方案,可以将焦点设置在具有自动回邮功能的文本框上。

如果需要代码,请在注释中询问

尝试,在服务器端使用SetFocus方法

Page.SetFocus(IdOfControl);

我有一个类似的问题,我使用一个隐藏字段修复了它,在该字段中我存储了用户选择的最后一个组件(单击或选项卡),回发后,它会将焦点设置回该组件

在页面中创建隐藏字段:

<asp:HiddenField runat="server" ID="hiddenCurrentFocus" ClientIDMode="static"></asp:HiddenField>
这与Jason在下面的帖子中建议的解决方案类似,但我更喜欢将其存储在隐藏字段中:


我如何准确地获得用户想要关注的控件的ID?这里的问题是,用户可以单击整个文档的任何文本框,回发需要保持焦点。
<asp:TextBox runat="server" ID="txtConfirmTransitId" OnFocusIn="setFocus(this.name)" ></asp:TextBox>
<script type="text/javascript">
    function setFocus(x) {
        $("#hiddenCurrentFocus").val(x);
    }
</script>
protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            //Set focus to the proper control
            var currentFocus = hiddenCurrentFocus.Value.ToString();
            if(!String.IsNullOrEmpty(currentFocus))
            {
                Page.SetFocus(Page.FindControl(currentFocus));
            }
            
        }
    }