3

次のコードを使用して、ASP.NETユーザーコントロール「Box.ascx」を作成しました。

<div id="divContent" runat="server" visible='<%# AllowedToView(this.Privacy) %>'>
    Content
</div>

コードビハインドでは、「Box.ascx.cs」に次のコードが含まれています。

public string Privacy = string.Empty;
public bool AllowedToView(string privacy)
{
    return true;
}

このコントロールをリピーターで使用すると、AllowedToView()関数がヒットします。リピーターなしでこのコントロールを使用すると、AllowedToView()関数が呼び出されません。この奇妙な状況が発生する理由と、リピーターなしで使用した場合にコントロールにAllowedToView()関数を呼び出させる方法を知りたいです。

詳細は以下の通りです。

このコントロールは、「Default.aspx」のリピーターで使用します。

<asp:Repeater ID="rpRecords" runat="server">
    <ItemTemplate>
        <uc1:Box ID="myBox" runat="server" RecordID = '<%# Eval("RecordID") %>' />
    </ItemTemplate>
</asp:Repeater>

リピーターは、次のコードで「Default.aspx.cs」にデータバインドされています。

DataTable dt = FillTable();
rpRecords.DataSource = dt;
rpRecords.DataBind();

次のコードで「ShowBox.aspx」の「Box.ascx」コントロールを使用します。

<body>
    <uc1:Box ID="myBox" runat="server" />
</body>

次のコードを使用して、コードビハインドからユーザーコントロールに値を指定します。

protected void Page_Load(object sender, EventArgs e)
{
    myBox.RecordID = "1";
}
4

3 に答える 3

3

別の回答で述べたように、#はデータバインディングを実行する必要があることを意味します。

したがって、「リピーターの外部で実行する方法」という質問に答えるには、簡単な答えはを呼び出すことmyBox.DataBind()です。

あなたの質問は、 asp.netインラインコード<%#MyboolVal%>と非常によく似ています。問題は、<%=がResponse.Writeに等しく、ストレートHTMLを出力するため、visibleプロパティを設定するときに機能しないことです。

于 2011-12-15T20:09:32.797 に答える
1

#は必要ないと思いますが、代わりにASPタグに=が必要です。#はデータバインディングイベント専用であり、リピーターはレンダリングのためにデータバウンドを実行するため、リピーターで機能するのは確かです。

このリンクを確認してください:http://blogs.msdn.com/b/dancre/archive/2007/02/13/the-difference-between-lt-and-lt-in-asp-net.aspx

于 2011-12-15T19:39:30.973 に答える
0

Webフォームの専門家ではありませんが、問題は、そのメソッドをデータバインドしようとしていて、それが機能しないことだと思います。<%= AllowedToView(this.Privacy)%>に入れてみてください。

于 2011-12-15T19:39:11.100 に答える