.net 中,runat=server和页面运行后台指令的冲突现象

版权声明: https://blog.csdn.net/superwfei/article/details/84633759

嗯。。。。。一个小小的需要注意的地方

在.net开发中,我们经常使用runat=server,来定义一些控件,来通过后台代码进行这些控件的管理,比如 <asp:Panel>啦,<asp:MultiView>啦,<asp:Repeater>啦,其他内容我们就不再管理了,但是,这里要说个但是:但是,尽管其他所有的html标签,我们都没有使用runat=server,在.net后台代码中也可以获取到,并可以进行管理,例如一个c#的例子

首先是一个页面aspx文件内容

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="xxxx.aspx.cs" Inherits="xx.xxx.xxxx" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>这个title默认是runat=server的,即便不加,他也可以获取到,只要head定义了runat=server</title>
    <link rel="stylesheet" href="/css/product.css" />
</head>
<body>
	<div id="nav">
		<asp:Repeater ID="rp_nav" runat="server">
			<ItemTemplate>
				<li><a href="<%#Eval("导航链接")%>"><%#Eval("导航文字")%></a></li>
			</ItemTemplate>
		</asp:Repeater>
	</div>
</body>
</html>

那么,我们在后台的Page_Load里增加一行代码,我们看看结果

ControlCollection cc = this.Page.Controls;

我们可以发现 cc的子项有5项,来看看细节

cc[0]的内容

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

cc[1]的内容

<head runat="server">
    <title>这个title默认是runat=server的,即便不加,他也可以获取到,只要head定义了runat=server</title>
    <link rel="stylesheet" href="/css/product.css" />
</head>

cc[2]的内容

<body>
	<div id="nav">

cc[3]的内容

		<asp:Repeater ID="rp_nav" runat="server">
			<ItemTemplate>
				<li><a href="<%#Eval("导航链接")%>"><%#Eval("导航文字")%></a></li>
			</ItemTemplate>
		</asp:Repeater>

cc[4]的内容

	</div>
</body>
</html>

嗯,由于可以通过Controls获取所有内容,所以我们可以很方便的在后台操作所有页面上的内容,哪怕他没有runat=server,只要找对了对应的控件即可

当然,这里需要注意的问题是:System.Web.UI.HtmlControls和System.Web.UI.WebControls对象获取内容的方法不一样,HtmlControls多数是通过InnerHtml,而WebControls多数是通过Text属性,嗯,细节自己处理即可

然后通过反射,获取到InnerHtml或Text属性,然后通过反射赋值,就可以修改页面内容了

然后。。。。。然后。。。。我今天在已经实现了页面修改的aspx里,懒癌发作了。。。。不想用WebControls在后台判断,直接写了一段<%if (true){%><%}%>,然后,发现出问题了,我经过后台处理的内容全部都没有加载出来!

然后,还是这个测试页面,不同的地方只在有了一个页面的后台代码<%if (true){%><%}%>,灾难发生了,同样用 ControlCollection cc = this.Page.Controls; 发现,这次只有两个子项了,一个是HtmlHead,另一个则是我们定义的Repeater,而这两个对象都具有runat=server设置

原来。。。。。在aspx里写代码,会造成页面无法预编译,所以就无法在后台获取到所有内容了。。。。引以为戒啊

猜你喜欢

转载自blog.csdn.net/superwfei/article/details/84633759