2011-11-25 56 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的存在。有了它,我只是實現了一個「文本」屬性,其中包含標籤內的文本,所以它的工作方式就像字面控制。