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

我不是网络表单方面的专家,但我认为您的问题是您正在尝试对该方法进行数据绑定并且这对您不起作用,请尝试将其放入 <%= AllowedToView(this.Privacy) %>

于 2011-12-15T19:39:11.100 回答