天天看點

asp.net中Literal與label的差別

一、方案

Literal 最常用于向頁面中動态添加内容。

二、背景

Literal 控件表示用于向頁面添加内容的幾個選項之一。對于靜态内容,無需使用容器,可以将标記作為 HTML 直接添加到頁面中。但是,如果要動态添加内容,則必須将内容添加到容器中。典型的容器有 Label 控件、Literal 控件、Panel 控件和 PlaceHolder 控件。

Literal 控件與 Label 控件的差別在于 Literal 控件不向文本中添加任何 HTML 元素。(Label 控件呈現一個 span 元素。)是以,Literal 控件不支援包括位置屬性在内的任何樣式屬性。但是,Literal 控件允許指定是否對内容進行編碼。

Panel 和 PlaceHolder 控件呈現為 div 元素,這将在頁面中建立離散塊,與 Label 和 Literal 控件進行内嵌呈現的方式不同。

通常情況下,當希望文本和控件直接呈現在頁面中而不使用任何附加标記時,可使用 Literal 控件。

在 Literal 控件中編碼内容

Literal 控件支援 Mode 屬性,該屬性用于指定控件對您所添加的标記的處理方式。可以将 Mode 屬性設定為以下值:

·Transform. 将對添加到控件中的任何标記進行轉換,以适應請求浏覽器的協定。如果向使用 HTML 外的其他協定的移動裝置呈現内容,此設定非常有用。

·PassThrough. 添加到控件中的任何标記都将按原樣呈現在浏覽器中。

·Encode. 将使用 HtmlEncode 方法對添加到控件中的任何标記進行編碼,這會将 HTML 編碼轉換為其文本表示形式。例如,<b> 标記将呈現為 <b>。當希望浏覽器顯示而不解釋标記時,編碼将很有用。編碼對于安全也很有用,有助于防止在浏覽器中執行惡意标記。顯示來自不受信任的源的字元串時推薦使用此設定。

三、如何:向 Web 窗體頁添加 Literal Web 伺服器控件

      在您要以程式設計方式設定文本而不添加額外的 HTML 标記時,可以向 Web 窗體頁添加 Literal Web 伺服器控件。在要向頁面動态添加文本而不添加任何不屬于該動态文本的元素時,Literal 控件是一種很有用的方式。例如,您可以使用 Literal 控件來顯示您從一個檔案或者流中讀取的 HTML。

      說明: 如果想顯示靜态文本,可以使用 HTML 呈現它;不需要 Literal 控件。隻有在需要動态更改伺服器代碼中的内容時才使用 Literal 控件。

      1、從工具箱的“标準”頁籤中,将 Literal 控件拖動到頁面上。

2、或者,在“屬性”視窗的“行為”類别下,将 Mode 屬性設定為 Transform、PassThrough 或者 Encode。Mode 屬性指定該控件如何處理向其添加的任何标記。下面的示例顯示一個簡單網頁,該頁在運作時顯示标題新聞。該頁的主體(包括 Literal 控件)類似于下面的代碼。

<body>

  <form runat="server">

    <h1><asp:Literal id="Headline" runat=server

      mode="PassThrough"/></h1>

  </form>

</body>

      3、将代碼添加到頁面上以在運作時設定控件的 Text 屬性。

下面的示例顯示如何以程式設計方式設定 Literal 控件的文本和編碼。該頁包含一組單選按鈕,允許使用者在編碼文本和傳遞文本之間選擇。

說明: 如果您正将 Text 屬性設定為來自不受信任源的文本,則要将控件的 Mode 屬性設定為 Encode,這樣标記才不會形成可執行标記。

<%@ Page Language="C#" %>

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)

    {

        Literal1.Text = "This <b>text</b> is inserted dynamically.";

        if (radioEncode.Checked == true)

        {

            Literal1.Mode = LiteralMode.Encode;

        }

        if(radioPassthrough.Checked == true)

            Literal1.Mode = LiteralMode.PassThrough;

    }

</script>

<html>

<head runat="server"></head>

    <form id="form1" runat="server">

    <div>

        <br />

        <asp:RadioButton

            ID="radioEncode"

            runat="server"

            GroupName="LiteralMode"

            Checked="True"

            Text="Encode"

            AutoPostBack="True" />

            ID="radioPassthrough"

            Text="PassThrough"

        <asp:Literal ID="Literal1" runat="server"></asp:Literal> </div>

    </form>

</html>

四、Literal 類

在網頁上保留顯示靜态文本的位置。

      使用 System.Web.UI.WebControls.Literal 控件在網頁上保留顯示文本的位置。Literal 控件與 Label 控件類似,但 Literal 控件不允許對所顯示的文本應用樣式。可以通過設定 Text 屬性,以程式設計方式控制在控件中顯示的文本。

      警告: 此控件可用來顯示使用者輸入,而該輸入可能包含惡意的用戶端腳本。在應用程式中顯示從用戶端發送來的任何資訊之前,請檢查它們是否包含可執行腳本、SQL 語句或其他代碼。ASP.NET 提供輸入請求驗證功能以阻止使用者輸入中的腳本和 HTML。還提供驗證伺服器控件以判斷使用者輸入。

示例

下面的示例說明如何使用 Literal 控件顯示靜态文本。

      說明: 下面的示例使用單檔案代碼模型,如果将它直接複制到代碼隐藏檔案中,則它可能無法正常工作。此代碼示例必須被複制到具有 .aspx 擴充名的空文本檔案中。

<%@ Page Language="C#" AutoEventWireup="True" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

<html  >

<head>

    <title>Literal Example</title>

      void ButtonClick(Object sender, EventArgs e)

      {

         Literal1.Text="Welcome to ASP.NET!!";

      }

   </script>

</head>

   <form id="form1" runat="server">

      <h3>Literal Example</h3>

      <asp:Literal id="Literal1"

           Text="Hello World!!"

           runat="server"/>

      <br /><br />

      <asp:Button id="Button1"

           Text="Change Literal Text"

           OnClick="ButtonClick"

   </form>

上一篇: eval判斷語句
下一篇: jbpm資料庫表