A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李奔 中级黑马   /  2013-6-7 00:45  /  2666 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李奔 于 2013-6-9 11:39 编辑

在.aspx中拖两个控件,分别是html控件和服务器端控件。
直接双击服务器端控件就能产生事件编程,但双击html控件却不能。
之前看老师的视频说:"html控件+runat=server等于服务器端控件"该如何理解?
html控件是不是就不能产生事件编程了?
谢谢!

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

6 个回复

正序浏览
现在明白了,谢谢大家!
回复 使用道具 举报
asp.net服务段控件 和 html 服务端控件 的区别
1、 Asp.net服务器控件提供更加统一的编程接口,如每个Asp.net服务器控件都有Text属性。

2、 隐藏客户端的不同,这样程序员可以把更多的精力放在业务上,而不用去考虑客户端的浏览器是ie还是firefox,或者是移动设备。

3、 Asp.net服务器控件可以保存状态到ViewState里,这样页面在从客户端回传到服务器端或者从服务器端下载到客户端的过程中都可以保存。

4、 事件处理模型不同,Html标注和Html服务器控件的事件处理都是在客户端的页面上,而Asp.net服务器控件则是在服务器上,举例来说:

<input id="Button4" type="button" value="button" runat="server"/>是Html服务器控件,此时我们点击此按钮,页面不会回传到服务器端,原因是我们没有为其定义鼠标点击事件。

<input id="Button4" type="button" value="button" runat="server" onserverclick="test" />我们为Html服务器控件添加了一个onserverclick事件,点击此按钮页面会发回服务器端,并执行test(object sender, EventArgs e)方法。

<asp:Button ID="Button2" runat="server" Text="Button" />是Asp.net服务器控件,并且我们没有为其定义click,但是我们点击时,页面也会发回到服务器端。

回复 使用道具 举报
你的问题 也困扰过我...
以下是个人理解 代码写的不一定好 例子:一个产品类型的按钮 -- 实现点击后得到你点击的对象 并继续......
其实 服务器控件也好 html控件也好 只要能实现功能就好
先直接拖个控件 <asp:Button ID="btnProQMS" runat="server" CommandName="QMS" />
你双击后即可在后台

  1. <P>/// <summary>
  2.   /// 选择产品
  3.   /// </summary>
  4.   /// <param name="sender"></param>
  5.   /// <param name="e"></param>
  6.   protected void BtnProClick(object sender, EventArgs e)
  7.   {
  8.    var button = sender as System.Web.UI.WebControls.Button; //获得这个按钮
  9.    try
  10.    {
  11.     var type = (button == null) ? "" : button.CommandName.ToUpper(); //获取按钮的CommandName值
  12.     Session["ProType"] = type;
  13.     Page.ClientScript.RegisterStartupScript(Page.GetType(), "loginportal", "<script>funOpenFrame()</script>"); //调前台js方法
  14.    }
  15.    catch (Exception ex)
  16.    {
  17.     Logger().Error(" BtnProClick Exception Message: " + ex.Message);
  18.    }
  19.   }</P>
复制代码
  1. function funOpenFrame() {
  2. window.open("LoginPortalFrame.aspx", '', 'top=0,left=0,width=' + screen.availWidth + ',height=' + screen.availHeight + ',location=no,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,toolbar=no');
  3. window.opener = null;
  4. window.open('', '_self');
  5. top.window.close(); //必须加top因为嵌套了iframe
  6. }
复制代码
其实 这个功能 也可以用html控件来实现
<img alt="" id="ImageBtn_ProQMS" runat="server" src="~/resources/themes/images/picture/btnProQMS.jpg"
    onclick="funOpenFrame('QMS')" class="btnProQMS" /> 这是个图片按钮
onclick 调用的是前台的funOpenFrame方法

理论上:
(html控件) <input type="button" id="btn" value="button"/> 静态页面 不能在服务器端控制 只能在客户端被javascript等语言控制
(html服务器控件)<input id="Button" type="button" value="button" runat="server" /> 就是多加了runat="server"
                           但运行方式不同 它上运行在服务器端的 可以添加一个onserverclick事件 ,点击此按钮页面会发回服务器端,并执行test(object sender, EventArgs e)方法
(web服务器控件)<asp:Button ID="Button2" runat="server" Text="Button"/>当我们点击时 将由页面把Form发回到服务器端,由服务器来处理。

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
谢谢无畏和轮回的回答,不过还是不太明白。
回复 使用道具 举报
在.NET中,像<input type="text">,这类的标签是HTML控件,.NET将不会对这类的控件做任何处理。
当然,如果你想添加一些代码控制的话,那就要转换成服务器控件。
这样控件就多出了id属性和runat="server"的属性(runat="server"表示为服务器控件)这样就可以添加自己的代码进行控制
服务器控件提供统一的编程模型,代码都在服务器端运行。
其实浏览器接收到的都是HTML的代码,服务器端的代码在服务器上执行之后将编译成的HTML代码发送给用户,浏览器解析执行。你可以加深了解一下动态网站的请求响应机制中到底是发生了什么,代码在服务器端执行的先后顺序等等。很多问题将会迎刃而解

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 无__畏 于 2013-6-7 01:07 编辑

html控件+runat=serve   在编译的时候会以对象的方式存在后台
后台可以拿到这个标签  直接能点出来   lblName.Value=***

但不带runat=“server”的html标签不能从后台直接调用。
可以执行js的事件   onclick=js方法

服务器控件在请求处理的时候会有很对回发事件的处理(执行Page页面的生命周期),很麻烦,对性能而言  尽可能使用html原生态的标签

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马