国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
標題:ASP.NET 2.0服務器控件與form runat=server標記

本文是《ASP.NET 2.0應用程序開發(fā)》一書內容的延伸,講述ASP.NET 2.0服務器控件與標記之間的關系。


《ASP.NET 2.0應用程序開發(fā)》一書中,第19頁、第1.5.6小節(jié)的內容是關于ASP.NET 2.0服務器控件語法的描述,由于書中只是簡單地進行了介紹,現(xiàn)將更多的內容補充說明如下:
1,ASP.NET 2.0服務器控件與<form runat=server></form>的關系

ASP.NET 2.0服務器控件(HTML服務器控件和Web服務器控件)是否必須需要放在<form runat=server></form>的標記之中,可以根據(jù)需要進行設置,大多數(shù)情況下,對于只用來進行界面顯示的控件、并且不需要處理事件的控件,可以不放在<form runat=server></form>之間,對于大多數(shù)控件來說,是要在服務器端進行事件處理和獲得某些返回值的,因此需要放在<form runat=server></form>之間。

2,如何進行控制

服務器控件在進行Render、AddAttributesToRender等的時候,會執(zhí)行下面這句:

Page page1 = this.Page;
   if (page1 != null)
   {
         page1.VerifyRenderingInServerForm(this);
   }

Page.VerifyRenderingInServerForm 方法 就是驗證服務器控件是否需要在<form runat=server></form>的標記之中,如果不在這個標記之中,將會引發(fā)下面的異常。例如下面的代碼:

<%@ 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>

在瀏覽這樣的頁面時,將會引發(fā)異常:

類型“TextBox”的控件“TextBox1”必須放在具有 runat=server 的窗體標記內。
說明: 執(zhí)行當前 Web 請求期間,出現(xiàn)未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。

異常詳細信息: 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>

瀏覽這樣的頁面就不會產(chǎn)生異常。

3,調整展現(xiàn)方式后,頁面能否正常工作

MSDN上解釋Page.VerifyRenderingInServerForm 方法時說:

如果回發(fā)或使用客戶端腳本的服務器控件沒有包含在 HtmlForm 服務器控件 (<form runat="server">) 標記中,它們將無法正常工作。這些控件可以在呈現(xiàn)時調用該方法,以在它們沒有包含在 HtmlForm 控件中時提供明確的錯誤信息。

是的,雖然下面的代碼可以正常顯示,但一旦單擊“提交”按鈕,服務器端將得不到輸入的值,頁不能保存狀態(tài)了。

<%@ 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應用開發(fā)技術》";
    }
  }
</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>的表單也能實現(xiàn)),將表單控件放在<form runat=server></form>標記之外,將非常方便使用,這在以前的asp頁面中很常見,現(xiàn)在在aspx中也可義實現(xiàn)。下面的頁面,既利用了服務器控件的方便性,也逃脫出了類型“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應用開發(fā)技術》";
    Response.Write("<li>TextBox1.Text = " + TextBox1.Text);
    Response.Write("<li>Request.Params = " + Request.Params[TextBox1.UniqueID]);
    if (!IsPostBack)
    {
      TextBox1.Text = "《ASP.NET2.0應用開發(fā)技術》";
    }
  }
  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即可獲得輸入的關鍵字。

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ASP.NET Web 頁面語法概覽
asp.net夜話之六:asp.net基本控件
ASP.NET驗證控件之CustomValidator
asp.net 2.0中不同web控件之間的相互調用
淺談C# 加密中MD5和SHA1加密實現(xiàn) - 51CTO.COM
ScriptManager 類
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服