我在页面的Load中执行如下的语句:
Literal1.Text = @"<input id='F1' name='F1' type='text' class='tdinput' runat='server'  />";
然后,我想给这个HtmlInputText控件赋值,我采用这样的方法:
HtmlInputText hText = (HtmlInputText)this.FindControl("F1");
结果,怎么找都是hText = null;
我想可能是页面的载入顺序的问题,不知哪位大侠知道,我应该如何弄,才能够对这个HtmlInputText 控件赋值?
谢谢。

解决方案 »

  1.   

    这个input不是control,用FindControl应该是找不到的。
      

  2.   

    您是要在另一个事件中赋值吗?直接修改Literal1的Text值不行吗?
      

  3.   

    如果我不写在Literal1,就可以找到,
      

  4.   

    你这肯定不行的嘛,你这是动态赋一个input到Literal1里的,怎么会file的到呢,只用能js赋值
    ----------
    听书网http://99tbook.cn
      

  5.   

    呵呵,我觉得挺有趣的,肯定不行的原因是什么呢,动态控件为何就不能Find?
      

  6.   

    System.Web.UI.WebControls.Literal不允许使用子控件,可以改为 HtmlInputText box1 = new HtmlInputText();
            box1.Value = "11";
            box1.ID = "txtName1";
            this.Panel1.Controls.Add(box1);        ((HtmlInputText)this.Literal1.FindControl("txtName1")).Value = "houling";
      

  7.   

    页面回发之后这个控件消失了,当然Find不到
      

  8.   

    to houlinghouling :
    我的代码都是直接从一个文件中读取的,事实上会有很多个如:<input id='F1' name='F1' type='text' class='tdinput' runat='server'  />这样的控件,因此不能一个一个的构造。
      

  9.   

    to amandag :
    我这些代码都在一个方法中,应该不存在回不回发的问题。
      

  10.   

    也许我应该说明一下,我上面所有的代码都是在Page_Load中执行的
      

  11.   

    Literal1.Text = @" <input id='F1' name='F1' type='text' class='tdinput' runat='server'  />"; 
    你叶面生成后自己看看页面的代码  id='F1' name='F1' ??  no  id name都没有了貌似所以找不到八
      

  12.   

    我已经证实过很多次,生成后的页面,一切正常,就是这样的:<input id='F1' name='F1' type='text' class='tdinput' runat='server'  />
      

  13.   


    你只是在 Literal1.Text 写上了一些字符串,asp.net才不会去管你些什么,直接输出而已。即使你写上不“正常”的字符串也不会管,自然也根本不认识有id为F1的这个控件。要生成实际的控件,是要按照7楼那样的做法写。
      

  14.   

    你这不是动态控件!动态控件至少是一个控件,虽然它是动态被添加到页面中的。你这样写的只是一个string,放在LiteralControl的属性里,ASP.NET编译时不会理这个属性是什么值的,也不会把里面的值解释为控件,所以它永远都只是一个string而非控件。
      

  15.   


    是的,如果你真的对ASP.NET的编译过程感兴趣,需要十分清晰的理解为什么这不现实,建议你去读我的系列文章:
    http://www.cnblogs.com/cathsfz/archive/2006/10/31/545521.html
    (这是第一篇,后面的你顺着去看就是了。)
      

  16.   

    你这样做真的不现实哈
    你的
    Literal1.Text = @" <input id='F1' name='F1' type='text' class='tdinput' runat='server'  />"; 
    编译后在HTML中你将看到
    <input id='F1' name='F1' type='text' class='tdinput' runat='server'  />
    注意红色部分。说明这个F1根本就是不服务器控件,那么你用FindControl("F1")就肯定是Null了。
    要想赋值你可以用js,这样是可以实现,但是这个思路就不对
    你可以这样实现动态添加控件
    TextBox TextBox1 = new TextBox();
    Panel1.Controls.Add(TextBox1);
    建议写作Page_Init事件中
      

  17.   

    关键是你在findcontrol的时候有没有发生postback,如果发生则必须保存状态,或者重新添加该生成控件,然后赋值
      

  18.   

    页面回发之后这个控件消失了,当然Find不到
      

  19.   

    to mars58 :
    为何什么<input id='F1' name='F1' type='text' class='tdinput' runat='server'  /> 
    就说明不是服务器控件?我单独用上面的直接在页面中,用Find是可以找到的?其实大家说的一些原理我也基本上明白,但我想,页面生成后,应该和用不用Literal控件没有什么太多关系了才对,因为他实际上已经用我们希望的代码全部代替了,所以我才会想,有没有可能这样捕获取到呢?