在usercontrol内联代码中调用函数并不总是有效

时间:2011-12-15 19:22:45

标签: c# asp.net user-controls inline-code

我使用以下代码构建了一个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";
}

3 个答案:

答案 0 :(得分:2)

如另一个答案所述,#表示需要执行数据绑定。

所以回答你的问题&#34;如何让它在转发器之外运行&#34;简单的答案是致电myBox.DataBind()

您的问题与asp.net inline code <%# MyboolVal %>非常相似。问题是&lt;%=等于Response.Write并输出直接的HTML,因此在设置visible属性时它不会工作。

答案 1 :(得分:1)

我认为你不需要#,而是在ASP标签中。非常肯定#仅用于数据绑定事件,这就是它在转发器中工作的原因,因为转发器执行数据绑定以进行渲染。

点击此链接:http://blogs.msdn.com/b/dancre/archive/2007/02/13/the-difference-between-lt-and-lt-in-asp-net.aspx

答案 2 :(得分:0)

我不是webforms的专家,但我认为您的问题是您正在尝试数据绑定该方法并且不适合您,请尝试将其放入&lt;%= AllowedToView(this.Privacy)%&gt;