关于Literal控件的问题

浩子 2008-10-23 03:47:03
我在页面的Load中执行如下的语句:
Literal1.Text = @"<input id='F1' name='F1' type='text' class='tdinput' runat='server' />";
然后,我想给这个HtmlInputText控件赋值,我采用这样的方法:
HtmlInputText hText = (HtmlInputText)this.FindControl("F1");
结果,怎么找都是hText = null;
我想可能是页面的载入顺序的问题,不知哪位大侠知道,我应该如何弄,才能够对这个HtmlInputText 控件赋值?
谢谢。
...全文
657 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
浩子 2008-10-28
  • 打赏
  • 举报
回复
我现在找到了代替的方法,此贴先结吧
lovehongyun 2008-10-26
  • 打赏
  • 举报
回复
你这只是写了一个字符串
根本就不是动态创建控件
mengxj85 2008-10-26
  • 打赏
  • 举报
回复
顶一下,看来搂主只能搞其他控件了
浩子 2008-10-26
  • 打赏
  • 举报
回复
to mars58 :
为何什么<input id='F1' name='F1' type='text' class='tdinput' runat='server' />
就说明不是服务器控件?我单独用上面的直接在页面中,用Find是可以找到的?

其实大家说的一些原理我也基本上明白,但我想,页面生成后,应该和用不用Literal控件没有什么太多关系了才对,因为他实际上已经用我们希望的代码全部代替了,所以我才会想,有没有可能这样捕获取到呢?
qq2013 2008-10-26
  • 打赏
  • 举报
回复
ding
qq2013 2008-10-26
  • 打赏
  • 举报
回复
ding
mars58 2008-10-24
  • 打赏
  • 举报
回复
你这样做真的不现实哈
你的
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事件中
sxmonsy 2008-10-24
  • 打赏
  • 举报
回复
页面回发之后这个控件消失了,当然Find不到
shulei521 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 amandag 的回复:]
页面回发之后这个控件消失了,当然Find不到
[/Quote].
MicroYee 2008-10-24
  • 打赏
  • 举报
回复
在公司的项目里有发现类似的用法,
这种使用方式最好不用
hccl 2008-10-24
  • 打赏
  • 举报
回复
关键是你在findcontrol的时候有没有发生postback,如果发生则必须保存状态,或者重新添加该生成控件,然后赋值
bsetsail 2008-10-24
  • 打赏
  • 举报
回复
up
MadWork 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 houlinghouling 的回复:]
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";
[/Quote]

winner2050 2008-10-23
  • 打赏
  • 举报
回复
你那样添加的根本不是服务器控件.
cat_hsfz 2008-10-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 mousie 的回复:]
莫非大家都认为我这种想法是不现实的吗?
[/Quote]

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

动态控件至少是一个控件,虽然它是动态被添加到页面中的。你这样写的只是一个string,放在LiteralControl的属性里,ASP.NET编译时不会理这个属性是什么值的,也不会把里面的值解释为控件,所以它永远都只是一个string而非控件。
浩子 2008-10-23
  • 打赏
  • 举报
回复
莫非大家都认为我这种想法是不现实的吗?
mjjzg 2008-10-23
  • 打赏
  • 举报
回复
UP
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mousie 的回复:]
我已经证实过很多次,生成后的页面,一切正常,就是这样的: <input id='F1' name='F1' type='text' class='tdinput' runat='server' />
[/Quote]

你只是在 Literal1.Text 写上了一些字符串,asp.net才不会去管你些什么,直接输出而已。即使你写上不“正常”的字符串也不会管,自然也根本不认识有id为F1的这个控件。要生成实际的控件,是要按照7楼那样的做法写。
kfps8kfps8 2008-10-23
  • 打赏
  • 举报
回复
up
加载更多回复(14)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧