什么是LiteralControl?为什么用它?

时间:2010-07-18 04:38:41

标签: asp.net controls

什么是LiteralControl?我正在阅读LiteralContols,但我不确定为什么使用它们。 我使用此代码列出页面中的控件 - 我有一个带有标签和按钮的页面。当我使用这个

foreach (Control control in Page.Controls)
{
    Response.Write(control.GetType().ToString() + " - <b> " + control.ID + "</b><br />");    

    if (control is LiteralControl)
    {
        Response.Write("Textt :" + ((LiteralControl)control).Text.ToString() + " - " + 
            Server.HtmlEncode(((LiteralControl)control).Text + "<br />") ); 
    }
}

我发现在我添加到页面的每个控件之前和之后都生成并列出了LiteralControls。文字控件也只有文本属性。

我仍然不确定为什么LiteralControls需要和使用?为什么使用LiteralControls?为什么我添加到页面的控件在前后放置了一个LiteralControl?为什么他们只有Text Property?

7 个答案:

答案 0 :(得分:16)

LiteralControl用于在运行时将HTML注入页面。

答案 1 :(得分:14)

From MSDN Literal Control表示ASP.NET页面中的HTML元素,文本和任何其他字符串,不需要在服务器上进行处理。

另请参阅Literal Control usage

label呈现<span>标记。它允许您以编程方式更改 显示要显示的某些文本的特征。一个LiteralControl 准确呈现您想要的任何静态HTML。没有一般性的 使用一个优于另一个的优势。一个可能比另一个更有用 在某些情况下。例如,如果要显示静态文本, 并且不对其进行编程更改,您可能希望使用a LiteralControl。

答案 2 :(得分:5)

许多不了解语义标记价值的程序员(尤其是那些主要使用Windows窗体背景的程序员)将使用Label控件或HTML LABEL标记作为占位符,以便在页面上以编程方式生成文本。这样做的缺点是Label在HTML文档中具有语义含义。

使用文字为您提供一个具有要挂接的ID属性的控件,同时允许您在其周围注入语义正确的标记。

此外,如果您最终没有将任何文本推送到LABEL标记,它仍然会在HTML中输出标记,如下所示:<label></label>,而没有文本的Literal将不输出任何内容 - 更清晰。

答案 3 :(得分:3)

对于任何不属于ASP.NET服务器控件的HTML标记,您将获得LiteralControl。这就是框架如何呈现页面的HTML灌木丛。 Text属性就是这个HTML,它还包含任何空格。

答案 4 :(得分:0)

我在一个Web应用程序中所做的是挂钩页面上定义的literal控件以在运行时添加文本。 literal控件不会创建自己的标记,但会很乐意呈现您提供给Text属性的任何HTML,以及原始文本。

答案 5 :(得分:0)

试试这个:

foreach (Control control in Page.Controls)
{
    Response.Write(control.GetType().ToString() + " - <b> " + control.ID + "</b><br />");    

    if (control is LiteralControl)
    {
        Response.Write("Textt :" + ((LiteralControl)control).Text.ToString() + " - " + 
        Server.HtmlEncode(((LiteralControl)control).Text + "<br />") ); 
    }
}

答案 6 :(得分:0)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
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)
  { }
  protected void btnGenerateControl_Click(object sender, EventArgs e)
  {
     // Retrieve the count of the controls to generate
    int Count = Convert.ToInt16(txtControlsCount.Text);
    // Loop thru each list item in the CheckBoxList
    foreach (ListItem li in chkBoxListControlType.Items)
    {
        if (li.Selected)
        {
            // Generate Lable Controls
            if (li.Value == "Label")
            {
                for (int i = 1; i <= Count; i++)
                {
                    Label lbl = new Label();
                    lbl.Text = "Label - " + i.ToString() + "<br>";
                    //phLabels.Controls.Add(lbl);
                    //tdLabels.Controls.Add(lbl);
                    pnlLabels.Controls.Add(lbl);
                }
            }
            // Generate TextBox controls
            else if (li.Value == "TextBox")
            {
                for (int i = 1; i <= Count; i++)
                {
                    TextBox txtBox = new TextBox();
                    txtBox.Text = "TextBox - " + i.ToString() ;                  
                    //phTextBoxes.Controls.Add(txtBox);
                    //tdTextBoxes.Controls.Add(txtBox);

                    pnlTextBoxes.Controls.Add(txtBox);
                     pnlTextBoxes.Controls.Add(new LiteralControl("<br />"));  
                    //pnlTextBoxes                
                }
            }
            // Generate Button Controls
            else
            {
                for (int i = 1; i <= Count; i++)
                {
                    Button btn = new Button();
                    btn.Text = "Button - " + i.ToString();
                    //phButtons.Controls.Add(btn);
                    //tdButtons.Controls.Add(btn);

                    pnlButtons.Controls.Add(btn);
                    pnlButtons.Controls.Add(new LiteralControl("<br />"));
                }
            }
        }
    }
  }
}