<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
myTr.Visible = false;
mySpan.Visible = false;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<table runat="server">
<tr id="myTr">
<td>Hello</td>
<td><span id="mySpan">World</span></td>
</tr>
<tr>
<td>Hi</td>
<td>Bye</td>
</tr>
</table>
</form>
</body>
</html>
注意myTr
和mySpan
都没有runat = server ,但编译器只在mySpan.Visible = false
上出错。
为什么编译器报告错误myTr.Visible = false
?
答案 0 :(得分:1)
我的猜测是您可以访问tr
,因为该表在服务器上运行,tr
是表本身的一部分。
另一方面,span
元素只能从客户端访问,因为它没有在服务器端呈现。
如果您为表的某个td添加了一个id,那么您也可以在服务器端脚本上访问它。但是,如果从表中删除runat="server"
,则在尝试访问表组件时会出现构建错误。
<table runat="server">
<tr id="myTr">
<td id="myTd">Hello</td> <%--This td is also accessible from the server script--%>
<td><span id="mySpan">World</span></td>
</tr>
</table>
更新: 好的,它不再是猜测了。根据Michael Amundsen和Paul Litwin在他们的书ASP.NET for Developers上的重要解释。你可以看到原因。
根据您的评论总结: 在页136,副标题:表标题(Th),行(Tr)和详细信息(Td)它说:您还可以使用服务器端代码来操作表的th,tr和td标记。 清单8.9使用服务器端代码操作Th,Tr和Td标记与您的非常相似。
基本上只包含runat="server"
和th
,tr
和td
元素的表格,只有id属性(没有runat =&#34; server&#34;)可以从列表顶部的Page_Load
事件处理程序中有效地访问。
如果继续阅读,您将看到有关服务器控件的说明以及ASP.NET如何将它们与Html元素匹配。
希望这有帮助!