3

SharePointリストからリテラルコントロールにHTMLコンテンツを書き込むasp.netUserControlがあります。現在、Literalに書き込む各SharePointリストアイテムの前にh5タグにタイトルを挿入しています。タイトルをh5タグに配置するようにハードコーディングする代わりに、タイトルのhtml形式を定義できるユーザーコントロールのパブリックプロパティを公開したいと思います。これは、実際にはユーザーコントロールのテンプレートではないため、私が多く見つけたテンプレート化されたユーザーコントロールの質問とは少し異なります。htmlを含む文字列が必要です。これが私がやろうとしていることです:

public class MyUserControl: UserControl
{
    public string TitleFormat { get; set; }

    private void ShowContent()
    {
        ...
        string output = String.Format(TitleFormat, title) + someContent;
        ltlOutput.Text = output.
    }
}

マークアップ:

<UC:MyUserControl id="muc1" runat="server">
    <TitleFormat>
        <a href="www.somewhere.com"><h3>{0}</h3></a>
    </TitleFormat>
</UC:MyUserControl>

どうすればこれを設定できますか?

4

2 に答える 2

2

答えは次のとおりです(asp.netフォーラムでDecker Dongが提供):

別のクラスを1つにネストするには、新しいプロパティを宣言する必要がありますが、それがInnerPropertyであると宣言するだけです。そして、そのデザインプロパティを設定します。これがあなたのための完全なサンプルです:

[ParseChildren(true),PersistChildren(false)]
public partial class MyUserControl : System.Web.UI.UserControl
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public string TitleFormat
    {
        get;
        set;
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

これらの属性を使用すると、質問に記述されているようにコントロールを使用できます。

于 2012-06-28T16:39:38.123 に答える
-1

必要なのはhttp://msdn.microsoft.com/en-us/library/system.web.ui.itemplate.aspxです

HTML

<test:NamingControl runat="server" ID="NamingControl" TitleFormat="This is myTitle">
    <TitleFormatTemplate>
         My title is <%# Container.TitleFormat %>
   </TitleFormatTemplate>
</test:NamingControl>

UserControl

public partial class MyUserControl : System.Web.UI.UserControl
{
    private ITemplate template;
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public string TitleFormat
    {
        get;
        set;
    }

    [PersistenceMode(PersistenceMode.InnerProperty), 
    TemplateContainer(typeof(TitleFormatTemplate))]
    public ITemplate TitleFormatTemplate
    {
        get { return template; }
        set { template = value; }
    }

    protected override void CreateChildControls()
    {
        base.CreateChildControls();

        TitleFormatTemplate t = new TitleFormatTemplate();
        t.TitleFormat = this.TitleFormat;
        template.InstantiateIn(t);
        this.Controls.Add(t);
        this.DataBind();
    }
}

チャイルドコントロール-INamingContainer

public class TitleFormatTemplate : Control, INamingContainer
{
    private string _TitleFormat = "";
    public string TitleFormat
    {
        get { return _TitleFormat; }
        set { _TitleFormat = value; }
    }
}

よりシンプルなアプローチ-TitleFormatタグはもう必要ありません

MyUserControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyUserControl.ascx.cs"      
    Inherits="testgingweb.usrcontrols.MyUserControl" %>

<a href="www.somewhere.com"><h3><asp:Label runat="server" ID="PassedValueLabel"></asp:Label</h3></a>

コードビハインド-MyUserControl.ascx.cs

public string TitleFormat
{
    get { return ViewState["TitleFormat"]; }
    set { ViewState["TitleFormat"] = value; }
}

protected void Page_Load(object sender, EventArgs e)
{
    PassedValueLabel.Text = String.Format("Whatever {0} here", this.TitleFormat);
}

HTML

<test:MyUserContorl runat="server" ID="NamingControl" TitleFormat="This is myTitle">
</test:MyUserContorl>

TitleFormat私はもうタグを持っていなかったことに注意してください。

于 2012-06-26T17:24:27.967 に答える