具有属性优先级行为的ASP.NET用户控件

时间:2011-11-25 14:45:01

标签: c# asp.net user-controls attributes

找到回答自己,见下文......

我想要一个非常简单的用户控件...

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

这导致输出中出现“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会产生“Some text”,而ID = translate2则会显示“其他一些文字”

简单地说,如果未设置LocalizedText属性,则会呈现translate标记内的文本。如果既未设置LocalizedText,也未设置元素内的文本,则呈现空字符串。

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

我正在写这个只是因为我不确定如何正确设置UserControl属性属性......

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 的存在。有了它,我只实现了一个“Text”属性,它包含放在标签内的文本,因此它就像文字控件一样。

1 个答案:

答案 0 :(得分:0)

我需要知道的是ITextControl接口的存在。有了它,我只是实现了一个&#34; Text&#34; attribute,包含放在标记内的文本,因此它的工作方式与文字控件相同。