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