2011-11-25 23 views
1

找到了答案我自己,见下文...具有属性优先级的行为ASP.NET用户控件

我想有一个非常简单的用户控制...

<mw:Translate LocalizedText="Some text" /> 

这会在输出中产生“一些文字”。

但是,如果我把它像这样:

<mw:Translate ID="translate1" LocalizedText="Some text" />Some other text</mw:Translate> 
<mw:Translate ID="translate2"/>Some other text</mw:Translate> 

ID = translate1导致 “一些文本”,而ID = translate2呈现 “其他一些文字”

简单地说,如果LocalizedText属性没有设置,那么翻译标记内的文本被渲染。如果LocalizedText和元素中的文本都未设置,则会呈现空字符串。

为了澄清,LocalizedText属性是首选。因此,如果设置了mw:Translate标签主体和LocalizedText,则会呈现Localized Text。

我书面方式这只是因为我不知道如何正确的用户控件属性的属性设置...

using System.Web.UI; 
using System.ComponentModel; 
using System; 
namespace MagicWare.Web.UI.WebControls 
{ 
    [PersistChildren(false)] 
    [ParseChildren(true, "InsideText")] 
    public class Translate : System.Web.UI.WebControls.Literal 
    { 
     public string LocalizedText 
     { 
      get { return Text; } 
      set { this.Text = Translations.Translate(Value); } 
     } 

     [PersistenceMode(PersistenceMode.InnerDefaultProperty)] 
     public string InsideText { get; set; } 

     protected override void Render(HtmlTextWriter writer) 
     { 
      if (!String.IsNullOrEmpty(Text)) 
      { 
       writer.Write(Text); 
       return; 
      } 
      if (!String.IsNullOrWhiteSpace(InsideText)) 
      { 
       writer.Write(InsideText); 
       return; 
      } 
      writer.Write(""); 
     } 
    } 
} 

ANSWER

一切,我需要知道的是存在界面ITextControl。有了它,我只是实现了一个“文本”属性,其中包含标签内的文本,所以它的工作方式就像字面控制。

+0

当你有两个时,你想如何渲染? – Magnus

+0

LocalizedText属性是首选。因此,如果设置了mw:Translate标签主体和LocalizedText,则会呈现Localized Text。 – Mirek

+0

什么是你的问题? –

回答

0

我需要知道的一切是接口ITextControl的存在。有了它,我只是实现了一个“文本”属性,其中包含标签内的文本,所以它的工作方式就像字面控制。