1

私はSystem.UI.Web.Pageを含むを持っていますuser control

から変数を渡したいpage to the user control

私が見ることができるものから、私はどうやら、<%# variable %>そしてを使わなければなりません。しかし、これがどのように行われるかを示す明確な例は見つかりません。DataBind()

通常、ユーザーコントロールを使用すると、次のようになります。

<UI:YouTube VideoId="XXXXXXXX" runat="server" />

ただし、この例では、次のようになります。

<UI:YouTube VideoId="<%# sYouTubeCode %>" runat="server" />

sYouTubeCodeはpublic string property、ページの後ろのコードにあります。

それが関連している場合、背後にあるコードを参照するときにaspx page持っています。AutoEventWireup="false"

いつこれをしますdatabindingか?
ページまたはユーザーコントロールで、どのように表示されますか?

4

2 に答える 2

1

これは、あなたが達成しようとしていることを示していると私が思う簡単な例です。タグ内のすべてがコードビハインドに含まれる可能性があることに注意してください<script runat="server">。読みやすくするために、ここではすべてを1つのファイルにまとめています。

AutoEventWireupに設定したので、メソッドをオーバーライドしてイベントハンドラーを接続falseする必要があります。このメソッドでは、プロパティの値を任意に設定して(私はプロパティを使用しました)、サーバーコントロールを呼び出すだけです(この場合はコントロールを使用しました)。OnInitLoadPage_LoadMyTextDataBindLiteral

<%@ Page Language="C#" AutoEventWireup="false" %>
<html>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Literal ID="litText" Text="<%# MyText %>" runat="server" />
    </div>
    </form>
</body>
</html>
<script runat="server">
    public string MyText { get; set; }

    private void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
            MyText = "some text to databind!";
            litText.DataBind();        
        }
    }

    protected override void OnInit(EventArgs e)
    {
        Load += Page_Load;
        base.OnInit(e);
    }
</script>

Page_LoadFWIW、上記のコードは正常に機能しますが、メソッドにプロパティを設定<%# %>して、フロントページのを省略した方がクリーンだと思います。コードビハインドでプロパティを設定するのがより一般的なアプローチだと思いますが、明らかに選択はあなた次第です。

また、興味がある場合は、MSDNで詳細をAutoEventWireup="false"確認できます。「AutoEventWireup属性の値がfalseの場合」というタイトルのセクションを探します。

編集

静的プロパティも正常に機能します。Page.DataBind()@nunespascalが提案したように使用した例を次に示します(これはで動作しlitText.DataBind()ます)。

<%@ Page Language="C#" AutoEventWireup="false" %>
<html>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Literal ID="litText" Text="<%# MyClass.StaticProp %>" runat="server" />
    </div>
    </form>
</body>
</html>
<script runat="server">
    private void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
            Page.DataBind();
    }

    protected override void OnInit(EventArgs e)
    {
        Load += Page_Load;
        base.OnInit(e);
    }

    public class MyClass
    {
        public static string StaticProp { get { return "Static Property"; } }
    }
</script>
于 2013-02-14T06:03:35.617 に答える
1

ページで呼び出している限りDataBind、のような値をユーザーコントロールに自由に渡してくださいVideoId="<%# sYouTubeCode %>"

あなたはあなたの価値観をうまく受け取るはずです。

DataBindingはライフサイクルの後半で発生することに注意してください。PreRenderの直前。

ページ上で呼び出すDataBindと、ページ上のコールコントロールに対して呼び出されます。Page_Loadで呼び出すのは良いことです。

于 2013-02-14T06:18:25.590 に答える