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

asp.net – 无法在动态创建的System.Web.UI.WebControl上使用Con

发布时间:2020-12-15 19:48:29 所属栏目:asp.Net 来源:网络整理
导读:为什么以下代码不起作用?我正在创建一个控件,添加一个子控件并尝试使用.FindControl方法通过id检索它. [Test] public void TryToFindControl() { var myPanel = new Panel(); var textField = new TextBox { ID = "mycontrol" }; myPanel.Controls.Add(text
为什么以下代码不起作用?我正在创建一个控件,添加一个子控件并尝试使用.FindControl方法通过id检索它.
[Test]
    public void TryToFindControl()
    {
        var myPanel = new Panel();
        var textField = new TextBox
        {
            ID = "mycontrol"
        };
        myPanel.Controls.Add(textField);

        var foundControl = myPanel.FindControl("mycontrol");

        // this fails
        Assert.IsNotNull(foundControl);
    }

解决方法

Panel尚未添加到页面,因此您无法使用FindControl.相反,您需要在Panel.Controls中找到它
[TestMethod]
public void TryToFindControl()
{
    var myPanel = new Panel();
    var textField = new TextBox
    {
        ID = "mycontrol"
    };
    myPanel.Controls.Add(textField);

    var foundControl = myPanel.Controls
        .OfType<TextBox>()
        .FirstOrDefault(x => x.ID == "mycontrol");

    Assert.IsNotNull(foundControl);
}

用页面测试

只有在将容器添加到Page时,FindControl才有效.

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender,EventArgs e)
    {
        var myPanel = new Panel();
        var textField = new TextBox
        {
            ID = "mycontrol"
        };
        myPanel.Controls.Add(textField);

        Controls.Add(myPanel);

        // foundControl is not null anymore!
        var foundControl = myPanel.FindControl("mycontrol");
    }
}

(编辑:李大同)

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

    推荐文章
      热点阅读