用户控件返回格式化文本

时间:2010-02-23 20:49:12

标签: c# asp.net

我正在寻找一种通过ASP.NET C#中的用户控件返回一些格式化文本的方法。这基本上就是我要找的东西:

调用用户控件,例如

<mycontrol:formatedtitle id="blah" runat="server">Text to format</mycontrol:formatedtitle>

然后让它返回一些格式化的HTML,例如

<div class="blah">Text to format</div>

我一直在网上阅读有关创建用户控件的内容,但没有任何内容接近我正在寻找的内容。我可以通过调用命令并让它返回fomatted文本,例如:

,轻松地在PHP中完成此操作
<? print_section_start("Text to format"); ?>

3 个答案:

答案 0 :(得分:2)

如果你想使用UserControl,那就相当容易了。这是一个基本的大纲。

假设您在根文件夹中创建了一个用户控制文件FormattedTitle.ascx和文件FormattedTitle.ascx.cs后面的代码。

标记如下:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="FormattedTitle.ascx.cs"
Inherits="FormattedTitle" %>
<asp:Label ID="lblTitle" runat="server" />

用户控件的代码如下:

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Web;
using System.Web.UI;

public partial class FormattedTitle : System.Web.UI.UserControl
{
    public string Title
    {
        get
        {  
            return this.lblTitle.Text;
        }
        set
        {
            this.lblTitle.Text = value;
        }
    }

    public string TitleFormat
    {
        get
        {  
            if(ViewState["TitleFormat"] != null)
                return ViewState["TitleFormat"].ToString();

            return string.Empty;
        }
        set
        {
            ViewState["TitleFormat"] = value;
        }
    }


    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        if(!string.IsNullOrEmpty(this.TitleFormat))
        {
            this.lblTitle.Text = string.Format(this.lblTitle.Text, this.TitleFormat);
        }
    }
}

我看到用户控件使用标记如下:

<%@ Register TagPrefix="uc" TagName="FormattedTitle" Src="FormattedTitle.ascx" %>
<uc:FormattedTitle ID="ftMyTitle" runat="server" Title="Title to Format" TitleFormat="SomeValidDotNetFormatString" />

未经测试,但应该让您入门。使用上述用户控件,您可以将标题及其格式设置为用户控件的属性。

有关.net中字符串格式的完整背景信息,请考虑使用以下资源:

修改

回答你的问题:多个标签 - 你的意思是页面上有多个控件实例吗?这实际上是用户控件的本质和目的 - 您可以根据需要随时添加它们,例如:

<%@ Register TagPrefix="uc" TagName="FormattedTitle" Src="FormattedTitle.ascx" %>

<uc:FormattedTitle ID="ftMyTitle" runat="server" Title="Title to Format" TitleFormat="SomeValidDotNetFormatString" />

<uc:FormattedTitle ID="ftMyTitle2" runat="server" Title="Some Other Title to Format" TitleFormat="SomeOtherValidDotNetFormatString" />

这是多个标签的意思吗?

答案 1 :(得分:0)

你可以在这里做很多事情:

  1. 创建一个自定义控件来执行您要求的操作。
  2. 使用<%= print_section_start("text to format") %>,这与您在PHP中的操作类似。
  3. <div>标记提供id和runat="server"属性,格式化后面代码中的文本,然后设置div的.InnerText属性

答案 2 :(得分:0)

你也可以给mycontrol一个等于“Text to format”的属性

<mycontrol:formatedtitle id="blah" runat="server" someAttributeName="Text to format"></mycontrol:formatedtitle>

您甚至可以访问用户控件的开始和结束标记之间的文本吗?