<%@ 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
上的错误?
最佳答案
我的猜测是您可以访问您的 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>
UPDATE: OK, It's not a guess anymore. According to the great explanation from Michael Amundsen and Paul Litwin on their book ASP.NET for Developers. You can see the reason there.
根据您的评论也在这里总结:
在第 136 页的副标题:表头 (Th)、行 (Tr) 和详细信息 (Td) 上说:您还可以使用服务器端代码来操作表的 th、tr 和 td 标签。 list 8.9 使用服务器端代码操作 Th、Tr 和 Td 标签 与你的非常相似。
基本上是一张带有
runat="server"
的表和 th
, tr
和 td
仅具有 id 属性的元素(无 runat="server")可从 Page_Load
有效访问列表顶部的事件处理程序。如果您继续阅读,您将看到有关服务器控件以及 ASP.NET 如何将它们与 Html 元素匹配的说明。
希望这可以帮助!
关于asp.net - 为什么我可以在没有 runat=server 的情况下从服务器端访问 HTML 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45449891/