Search code examples
c#asp.netuser-controlsinline-code

Calling function in usercontrol inline code doesn't always work


I have constructed an ASP.NET user control "Box.ascx" wtih the following code.

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

In the codebehind, "Box.ascx.cs" has the following code.

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

When I use this control in a repeater, AllowedToView() function is hit. If I use this control without a repeater, AllowedToView() function isn't called. I want to know why this weird situation happens and how can I make the control call the AllowedToView() function when used without repeater.

Details are below.

I use this control in a repeater in "Default.aspx".

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

The repeater is databound in "Default.aspx.cs" with the following code:

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

I use the "Box.ascx" control in "ShowBox.aspx" with the following code.

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

I give values to the user control from the codebehind with the following code.

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

Solution

  • As mentioned in another answer, the # means it will require databinding to be executed.

    So to answer your question "How to make it run outside of the repeater" the simple answer is to call myBox.DataBind().

    Your question is very similar to asp.net inline code <%# MyboolVal %>. The problem is that <%= is equal to Response.Write and outputs straight HTML, so it won't work when setting the visible property.