2010-02-23 8 views
0

Я ищу способ вернуть некоторый отформатированный текст через пользовательский элемент управления в ASP.NET C#. Это в основном то, что я ищу:Пользовательский элемент управления, который возвращает сформированный текст

Вызов пользовательских элементов управления, таких как

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

А затем он вернуть некоторые форматированный HTML, такие как

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

Я читала на сайте на создавая пользовательские элементы управления, но ничто не приближается к тому, что я ищу. Я был в состоянии сделать это в PHP легко, вызвав команду и с его вернуть fomatted текст, например:

<? print_section_start("Text to format"); ?> 
+1

Какое форматирование вы хотите сделать с текстом? Не можете ли вы просто создать метод и поместить туда текст: <% = Formatter.Format ('text')%> – Pbirkoff

ответ

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" /> 

Не проверено, но вам нужно начать. С помощью вышеуказанного пользовательского элемента управления вы можете установить заголовок и его форматирование как свойства пользовательского элемента управления.

Для получения полной информации о форматировании строки в формате.сеть, рассмотреть вопрос об использовании этих ресурсов:

EDIT:

Чтобы ответить на ваш вопрос: Re: несколько тегов - Вы имеете в виду несколько экземпляров элемента управления на странице? Это на самом деле природа и назначение пользовательских элементов управления - вы можете добавить их так часто, как это необходимо, например, как:

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

Это то, что вы имеете в виду несколько тегов?

+0

Это близко, но что, если я хочу иметь несколько тегов. –

+0

Ох, конечно, я понял. Я думаю, что этот будет работать. Я проверю это как ответ после того, как подтвержу, что он работает. Спасибо! –

+1

Нет проблем. Имейте в виду, что я не тестировал код, но теория будет работать. Может быть несколько проблем с синтаксисом здесь и там ... –

0

Там есть ряд возможных вещей, которые вы можете сделать здесь:

  1. Создать пользовательский контроль, который делает то, о чем вы просите.
  2. Используйте <%= print_section_start("text to format") %>, который похож на то, что вы делали в PHP.
  3. Дайте <div> тег идентификатор и атрибут runat="server", форматировать текст в код, а затем установить свойство .InnerText в DIV
0

вы могли бы также дать MyControl атрибут, равный «Текст в формат "

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

Можно ли получить доступ к тексту между метками открытия и закрытия пользовательского элемента управления?

Смежные вопросы