加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 查找上一个和下一个兄弟控件

发布时间:2020-12-16 07:15:34 所属栏目:asp.Net 来源:网络整理
导读:有没有办法从代码隐藏中找到ASP.net表单中的上一个和下一个兄弟控件,类似于findControl()? 有时您不想为控件分配ID,因此您可以执行parent().findControl(“ID”)以便找到它.当我所能做的就是previousControl()或其他东西(la jQuery)时,我已经厌倦了提出ID.
有没有办法从代码隐藏中找到ASP.net表单中的上一个和下一个兄弟控件,类似于findControl()?

有时您不想为控件分配ID,因此您可以执行parent().findControl(“ID”)以便找到它.当我所能做的就是previousControl()或其他东西(la jQuery)时,我已经厌倦了提出ID.

这对于编写常规函数以解决具有类似布局且不想逐个解决它们的多个控件的情况也很有用.

谢谢你的任何建议.

解决方法

对于后人来说,这是我最终写作的功能.效果很好(在实际项目中测试):

public static Control PreviousControl(this Control control)
    {
        ControlCollection siblings = control.Parent.Controls;
        for (int i = siblings.IndexOf(control) - 1; i >= 0; i--)
        {
            if (siblings[i].GetType() != typeof(LiteralControl) && siblings[i].GetType().BaseType != typeof(LiteralControl))
            {
                return siblings[i];
            }
        }
        return null;
    }

要像这样使用:

Control panel = textBox.PreviousControl();

并为下一个控制:

public static Control NextControl(this Control control)
    {
        ControlCollection siblings = control.Parent.Controls;
        for (int i = siblings.IndexOf(control) + 1; i < siblings.Count; i++)
        {
            if (siblings[i].GetType() != typeof(LiteralControl) && siblings[i].GetType().BaseType != typeof(LiteralControl))
            {
                return siblings[i];
            }
        }
        return null;
    }

这个解决方案优于Atzoya的优势在于,首先,您不需要原始控件来获取ID,因为我根据实例进行搜索.其次,您必须知道ASP.net会生成多个Literal控件,以便在您的“真实”控件之间呈现静态HTML.这就是我跳过它们的原因,或者你会继续匹配垃圾.当然,这样做的缺点是,如果它是一个文字,你就找不到控件.这个限制在我的使用中不是问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读