遍历页面所有控件

liuyun1987 2010-04-24 04:21:30
页面Html:

<form id="form1" runat="server">
<asp:HyperLink ID="Hy" runat="server" NavigateUrl="Index.aspx?page=2">点击</asp:HyperLink>
<a href="Index.aspx?page=2">Hello</a>
<a id="A1" href="Index.aspx">Hello</a>
</form>

我要在后台获取到form1下的所有控,包括System.Web.UI.HtmlControls和System.Web.UI.WebControls下的所有控件.

  foreach (Control control in this.form1.Controls)
{
if (control is HtmlAnchor)
{
//进不到这里
}
if (control is LinkButton)
{
//do something
}
}

可以读到HyperLink 控件.但就是读不到a 标签,用 control.GetType().ToString() 只读取到两种类型:
System.Web.UI.LiteralControl 和 System.Web.UI.WebControls.HyperLink,在LiteralControl的Text中包含了<a href="Index.aspx?page=2">Hello</a> <a id="A1" href="Index.aspx">Hello</a> ,并没有把a标签当作System.Web.UI.HtmlControls下的HtmlAnchor,请问怎么才有读取到a标签?
...全文
198 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangsifanbaba 2010-04-25
  • 打赏
  • 举报
回复
up..............
chai1338 2010-04-25
  • 打赏
  • 举报
回复
每天拿分,以示存在
  • 打赏
  • 举报
回复
比如你把 <a href="Index.aspx?page=2">Hello</a>
胡乱改为 <a href="Index.aspx?page=2">Hello<span /></a>
它也照样包装为Literal控件。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuyun1987 的回复:]
我现在不可能在前台页面每个a标签中都加入runat="server"属性,还有没有其它方法可以读取到HtmlAnchor?
[/Quote]

根本不存在这个,怎么读取?

你写的两个<a />,在asp.net开来就是一整个胡乱写的字符串,包装到Literal控件中参与其它的服务器控件处理,并最终输出html而已。它根本不解析出字符串里编写的什么。

你自己去解析所有Literal吧。
yufenghua 2010-04-25
  • 打赏
  • 举报
回复
a标签不加runat="server"的话不会当做web控件处理。。。。
惜分飞 2010-04-24
  • 打赏
  • 举报
回复
不加runat="server"就必须用js来处理哦,服务端不能实现
wuyq11 2010-04-24
  • 打赏
  • 举报
回复
var obj=document.getElementsByTagName("A")
for(i=0;i<obj.length;i++)
{
alert(obj[i].outHTML)
}
duxj007 2010-04-24
  • 打赏
  • 举报
回复
同意~~~~`
likevs 2010-04-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liuyun1987 的回复:]
在a标签里加上runat="server"属性后可以读取到HtmlAnchor,为什么呢?
[/Quote]

因为加了这个属性后,它就是一个对象,如果不加,就是静态标签

vip__888 2010-04-24
  • 打赏
  • 举报
回复
按照楼主的想法
在 超链接上加上js语句

使用js语句给hidden赋值 然后提交表单 你在后台处理表单对象
zorou_fatal 2010-04-24
  • 打赏
  • 举报
回复
恐怕你无法在后台直接做这样的事情。
teerhu 2010-04-24
  • 打赏
  • 举报
回复
那就在前台頁面進行處理嘍
用jquery很容易查找控件,並對其行為處理
happy664618843 2010-04-24
  • 打赏
  • 举报
回复
runat="server"
for(int i=0;i<page.Controls.count;i++){
foreach(Control C in Page.Controls[i].Control){
if(C is LinkButton){
//dosomething
}
}
}
wanghui0380 2010-04-24
  • 打赏
  • 举报
回复
如果不信,请把页面Trace打开去看控件生成顺序,你就会发现他并没有相应的后端控件
liuyun1987 2010-04-24
  • 打赏
  • 举报
回复
我现在不可能在前台页面每个a标签中都加入runat="server"属性,还有没有其它方法可以读取到HtmlAnchor?
liuyun1987 2010-04-24
  • 打赏
  • 举报
回复
在a标签里加上runat="server"属性后可以读取到HtmlAnchor,为什么呢?
wanghui0380 2010-04-24
  • 打赏
  • 举报
回复
????????

你没有runat=server 他自然认不出

后端代码只认带runat=server的控件

62,046

社区成员

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

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

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

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