当前位置:编程学习 > C#/ASP.NET >>

runat="server"的作用

请问在ASP.net中runat = "server"的作用是什么? --------------------编程问答-------------------- 表示服务器代码可以直接对他操作 --------------------编程问答-------------------- 让它runat server --------------------编程问答-------------------- 是这个控件变成服务器端控件 --------------------编程问答-------------------- 就是变成了服务器控件,
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>用法和这种标签差不多 --------------------编程问答-------------------- 在html写了这句话后,这个控件就是服务器控件了 --------------------编程问答-------------------- 将ASPX中某个控件标识为服务器端的控件,使得服务端(CS)中可以直接访问它 --------------------编程问答-------------------- 加这个就是告诉编译器,这是一个服务器端控件,这样就可以在后台的cs文件中操作这个控件。 --------------------编程问答-------------------- 给你写个demo,仔细看看它运行的结果:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <input id="Text1" type="text" value="adfasfda" runat="server" />
    <br id="br1" />
    <input type="file" id="InputFile" name="InputFile" />
    <br runat="server" id="br2" />
    <asp:Button ID="Button1" runat="server" Text="Button" />
    </form>
</body>
</html>
using System;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var gd = new GridView();
        gd.DataSource = (from Control c in this.form1.Controls
                         let prop = c.GetType().GetProperty("Text")
                         select new
                         {
                             ID = c.ID,
                             Type = c.GetType().FullName,
                             Text = prop == null ? string.Empty : (prop.GetValue(c, null) as string)
                         }).ToList();
        this.form1.Controls.Add(gd);
        gd.AutoGenerateColumns = true;
        gd.DataBind();
    }
}


这个程序输出了form1里边第一层的控件(这里也没有嵌套更深层次),asp.net解析的结果是:

1. 一个LiteralControl,但是其Text属性是string.Empty,也就是说其实是个空的,仅仅占位而已。
2. 一个HtmlControls.HtmlInputText,其ID是Text1。
3. 一个LiteralControl,其Text属性恰好是那两行没有runat="server"属性值的文本内容。
4. 一个HtmlGenericControl,其ID就是br2,这里没有去打印它的InnerHTML属性。
5. 一个LiteralControl,其Text也是string.Empty,跟1.一样是asp.net解析器自动插入的。
6. 一个Button,其ID是Button1,其Text是Button。
7. 一个LiteralControl,跟1.和5.一样,也是asp.net解析器自动插入的。


从以上输出你可以看到,没有标记为runat="server"的那些行,被打包进LiteralControl这个控件中,而不是各自解析为其它控件。所以要是有一点有人面试时问你“asp.net页面上的简单的html字符串被asp.net解析为什么服务器控件?”的时候,可不要茫然无措啊! --------------------编程问答--------------------
<input type="file" id="InputFile" name="InputFile" />
这个东西,不在某个服务器控件中吗?访问服务器控件无法找到它吗?这是不了解asp.net的说法。 --------------------编程问答-------------------- 服务器控件的绝对标识,服务器控件没有这个不行,html控件可以通过这个转化为服务器控件,便于在后台操作 --------------------编程问答-------------------- 在相应的.CS代码文件里就可以对控件进行操作了。你把HTML控件和其他控件拖懂到页面后看看就知道了,HTML控件没有runat=“server”的,其他的就有。 --------------------编程问答-------------------- “HTML控件”这个词有歧义。上面其实在测试所打印的第一个实际的控件已经显示出来了,在asp.net中的HTMLControls这个命名空间下的(而且基本上全都是以HTML打头命名的)的控件,全都是服务器控件。

在asp.net上,HTML控件也是服务器控件。这跟随便写的html字符串是不一样的。对于html字符串,实际上就算你胡乱修改,asp.net也不会很好地分析,而是直接扔到LiteralControl控件里就完了。 --------------------编程问答-------------------- 加上这个标签表示这个控件是服务器控件,在服务器端运行 --------------------编程问答-------------------- 最简单的就是你可以方便的在后台获取控件的值了 --------------------编程问答-------------------- 一眼看下来,上面有很多的算法都是错误的,或者说是片面的,身处.net大军中,深感悲哀啊!

之所以这么说,是因为前几天刚刚碰到一个问题,再加上刚才看的,好像很多人都没有说到点上。

除了sp1234大哥的话,因为大多,等下再仔细看看。。

先说说我遇到的问题:

.aspx文件中删除掉runat="server"的form表单,不能有服务器端控件,以<asp:开头的那种,但是却可以有添加runat="server"的html标签,从这点就可以看出.net对这两种的处理方式是不一样的。。

这儿没有针对大家的意思啊,如果说的不好请多多包涵!

:-D --------------------编程问答-------------------- 累了,睡觉,明天再看! --------------------编程问答-------------------- 表示服务器类型…… --------------------编程问答-------------------- 服务器控件 --------------------编程问答-------------------- 向童鞋们致敬 --------------------编程问答-------------------- 声明为服务器控件,和html标签相对 --------------------编程问答-------------------- 服务器控件
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,