2

私はこれを自分で見つけることができなかったことに驚いていますが、とにかく. Web ユーザー コントロールを次のように使用するとします。

<myprefix:mytag userid="4" runat="server">Some fancy text</myprefix:mytag>

コードビハインド ("Some fancy text") からタグ内のテキストにアクセスするにはどうすればよいでしょうか? this.Text、this.Value、または同様のものを通じて公開されることを期待していました。

編集:私はそれを使用しようとするページで次の警告さえ受け取ります: コンテンツは、要素「mytag」の開始タグと終了タグの間で許可されていません。

EDIT2:

public partial class mytag: UserControl
{
    public int ItemID { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {           
    }
}
4

2 に答える 2

10

カスタム コントロールにText文字列型のプロパティがあるとします。次に、このプロパティを永続化モード "InnerDefaultProperty" で宣言すると、探しているものが得られるはずです。

例えば

/// <summary>
/// Default Text property ("inner text" in HTML/Markup)
/// </summary>
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public string PropertyTest
{
    get
    {
        object o = this.ViewState["Text"];
        if (o != null)
        {
            return (string)o;
        }
        return string.Empty;
    }
    set
    {
        this.ViewState["Text"] = value;
    }
}

編集: 「Literal Content Not Allowed」を回避するには、クラス定義に追加[ParseChildren(true, "PropertyTest")]してパーサーを支援する必要があります ( MSDNを参照)。

そしてもちろん、書き込み可能なプロパティが必要です (つまり、前に簡潔にするために省略したセッターが必要です)。

于 2010-03-31T08:55:59.747 に答える
0

クラス ([ParseChildren(true, "TestInnerText")]) の前に 1 行追加し、"TestInnerText" という名前のプロパティを追加するだけです。選択した任意のコントロールを作成します。内部の html ビューを表示するためだけに LiteralControl を作成しました。

"TestInnerText" - 私が付けた一時的な名前です。任意のプロパティ名を使用できます。

[ParseChildren(true, "TestInnerText")]
public partial class mytag : UserControl
{
    public string TestInnerText
    {
        set
        {
            LiteralControl lc=new LiteralControl();
            lc.Text=value;
            this.Controls.Add(lc);
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}
于 2015-05-27T07:16:49.287 に答える