首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 图形图象-> PHOTOSHOP教程
ASP.NET 2.0服务器控件与form runat=server标记-.NET教程,Asp.Net开发
作者:网友供稿 点击:247
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
《asp.net 2.0应用程序开发》一书中,第19页、第1.5.6小节的内容是关于asp.net 2.0服务器控件语法的描述,由于书中只是简单地进行了介绍,现将更多的内容补充说明如下:

1,asp.net 2.0服务器控件与<form runat=server></form>的关系

asp.net 2.0服务器控件(html服务器控件和web服务器控件)是否必须需要放在<form runat=server></form>的标记之中,可以根据需要进行设置,大多数情况下,对于只用来进行界面显示的控件、并且不需要处理事件的控件,可以不放在<form runat=server></form>之间,对于大多数控件来说,是要在服务器端进行事件处理和获得某些返回值的,因此需要放在<form runat=server></form>之间。

2,如何进行控制

服务器控件在进行render、addattributestorender等的时候,会执行下面这句:

page page1 = this.page;
   if (page1 != null)
   {
         page1.verifyrenderinginserverform(this);
   }

page.verifyrenderinginserverform 方法 就是验证服务器控件是否需要在<form runat=server></form>的标记之中,如果不在这个标记之中,将会引发下面的异常。例如下面的代码:

<%@ page language="c#" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>verifyrenderinginserverform</title>
</head>
<body>
  <asp:textbox id="textbox1" runat="server"></asp:textbox>
  <form id="form1" runat="server">
  </form>
</body>
</html>

在浏览这样的页面时,将会引发异常:

类型“textbox”的控件“textbox1”必须放在具有 runat=server 的窗体标记内。
说明: 执行当前 web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: system.web.httpexception: 类型“textbox”的控件“textbox1”必须放在具有 runat=server 的窗体标记内。

这是因为,textbox控件在进行render的时候调用了page1.verifyrenderinginserverform(this);,因此,如果不放在<form runat=server></form>的标记之间,这个验证过程是通不过的。

但是,我们可以在代码中重载这个方法,以便是textbox控件可以放在<form runat=server></form>的标记之外,例如下面的代码:

<%@ page language="c#" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">

<script runat="server">
  public override void verifyrenderinginserverform(control control)
  {
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>verifyrenderinginserverform</title>
</head>
<body>
  <asp:textbox id="textbox1" runat="server"></asp:textbox>
  <form id="form1" runat="server">
  </form>
</body>
</html>

浏览这样的页面就不会产生异常。

3,调整展现方式后,页面能否正常工作

msdn上解释page.verifyrenderinginserverform 方法时说:

如果回发或使用客户端脚本的服务器控件没有包含在 htmlform 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 htmlform 控件中时提供明确的错误信息。

是的,虽然下面的代码可以正常显示,但一旦单击“提交”按钮,服务器端将得不到输入的值,页不能保存状态了。

<%@ page language="c#" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">

<script runat="server">
  public override void verifyrenderinginserverform(control control)
  {
  }

  protected void button1_click(object sender, eventargs e)
  {
    response.write("<li>textbox1.text = " + textbox1.text);
    response.write("<li>request.params = " + request.params[textbox1.uniqueid]);
  }

  protected void page_load(object sender, eventargs e)
  {
    response.write("<li>textbox1.text = " + textbox1.text);
    response.write("<li>request.params = " + request.params[textbox1.uniqueid]);
    if (!ispostback)
    {
      textbox1.text = "《asp.net2.0应用开发技术》";
    }
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>verifyrenderinginserverform</title>
</head>
<body>
  <asp:textbox id="textbox1" runat="server" width="600px"></asp:textbox>
  <form id="form1" runat="server">
    <asp:button id="button1" runat="server" onclick="button1_click"
      text="提交" />
  </form>
</body>
</html>

因此,在一般情况下,不要将服务器控件移到<form runat=server></form>的标记之外

4,如何强制将服务器控件放入<form runat=server></form>的标记之间

有些服务器控件可以不放在<form runat=server></form>的标记之间,如label控件,但如果需要强制将它放<form runat=server></form>的标记之间,可以使用下面的方法:

protected void label1_prerender(object sender, eventargs e)
{
  this.verifyrenderinginserverform(label1);
}

5,百害而无一益?

有时候,页面上需要放置多个form表单(虽然只放置一个<form runat=server></form>的表单也能实现),将表单控件放在<form runat=server></form>标记之外,将非常方便使用,这在以前的asp页面中很常见,现在在aspx中也可义实现。下面的页面,既利用了服务器控件的方便性,也逃脱出了类型“textbox”的控件“textbox1”必须放在具有 runat=server 的窗体标记内的限制。例如:

<%@ page language="c#" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">

<script runat="server">
   protected void button1_click(object sender, eventargs e)
  {
    response.write("<li>textbox1.text = " + textbox1.text);
    response.write("<li>request.params = " + request.params[textbox1.uniqueid]);
  }

  protected void page_load(object sender, eventargs e)
  {
    keywords.text = "《asp.net2.0应用开发技术》";
    response.write("<li>textbox1.text = " + textbox1.text);
    response.write("<li>request.params = " + request.params[textbox1.uniqueid]);
    if (!ispostback)
    {
      textbox1.text = "《asp.net2.0应用开发技术》";
    }
  }
  public override void verifyrenderinginserverform(control control)
  {
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>verifyrenderinginserverform</title>
</head>
<body>
  <form method="post" action="searchdoc.aspx">
    关键字:<asp:textbox id="keywords" runat="server"></asp:textbox>
    <asp:button id="button2" runat="server" text="搜索" />
  </form>
  <form id="form1" runat="server">
    <asp:textbox id="textbox1" runat="server" width="600px"></asp:textbox>
    <asp:button id="button1" runat="server" onclick="button1_click"
      text="提交" />
  </form>
</body>
</html>

在searchdoc.aspx页面,使用request.form即可获得输入的关键字。


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·一个通用的JSP分页程序-JSP教程,Jsp/Servlet
·几种上传方法介绍和比较-JSP教程,资料/其它
·photoshop帮你处理照片偏色
·用photoshop elements制作贺卡
·高频开关电源的并联均流系统
·photoshop 简单制作水晶字教程
·ASP.NET 2.0服务器控件与form runat=server标记-.NET教程,Asp.Net开发
·photoshop 简单去网纹法
·晶晶亮 透心凉—用photoshop制作水珠效果
·ASP小偷(远程数据获取)程序的入门教程-ASP教程,数据库相关
最新文章
·b2c独立网店如何推广_营销推广
·google adsense域名保护列表前瞻_网赚技巧
·google adsense 违规行为集_网赚技巧
·优化adsense提高网站收益(一)_网赚技巧
·站长徐得红:提倡人性化的领导_站长访谈
·约翰·多尔:互联网内容仍不够个性化_站长访谈
·助您提升博客浏览量的五大技巧_站长心得
·photoshop模仿龟裂的瓷纹杯_photoshop教程
·2007年,个人站长将何去何从?_站长心得
·解惑:网站是靠什么来赚钱的呢_站长心得
相关主题
  • asp.net应用程序资源访问安全模型_asp.net技巧
  • asp.net中多彩下拉框的实现_asp.net技巧
  • asp.net中数据校验部分的封装与应用_asp.net技巧
  • asp.net网络编程中常用到的27个函数集_asp.net基础
  • asp.net2.0学习历程 菜鸟到中级程序员的飞跃_asp.net基础
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭