我在aspx页面后面的代码中使用了一个名为IsAdmin的公共变量。
public partial class _news : System.Web.UI.Page
{
public bool IsAdmin = false;
protected void Page_Load(object sender, EventArgs e)
{
if (User.Identity.Name.Contains("admin"))
{
IsAdmin = true;
}
else
{
IsAdmin = false;
}
}
我使用属性Visible ='<%#IsAdmin%>'如果用户是页面的aspx设计中的管理员,则分配给我想要显示的面板。奇怪的是,它适用于我放在转发器上的链接按钮。
<asp:Panel ID="Panel1" runat="server" Visible='<%#IsAdmin%>'>
<asp:LinkButton ID="LinkButton2" runat="server" PostBackUrl='<%# "news_edit.aspx? Action=edit&id=" + Convert.ToString( Eval("news_id")) %>Edit</asp:LinkButton>
<asp:LinkButton ID="LinkButton3" runat="server" PostBackUrl='<%# "news.aspx?Action=delete&id=" + Convert.ToString( Eval("news_id")) %>'>Delete</asp:LinkButton>
</asp:Panel>
并且它工作正常,但是在转发器之外我放置了另一个没有面板的链接按钮
<asp:LinkButton ID="LinkButton4" runat="server" PostBackUrl="~/news_edit.aspx?action=new" Visible='<%#IsAdmin%>'>Add New Item</asp:LinkButton>
但是可见属性不起作用!我也尝试将它放在面板中并设置它的可见属性,但这也不起作用。
所以我有以下怀疑
1)问题是什么? 2)当我们使用像'&lt;%#IsAdmin%&gt;'这样的引用时,技术名称是什么?在设计页面中 3)在页面呈现后呈现页面之前是否发生页面加载?
由于
答案 0 :(得分:2)
<%# %>
是用于访问数据绑定字段的语法。由于您可能在某些时候对Repeater控件进行数据绑定,因此将对这些表达式进行评估。
由于您可能不调用Panel上的数据绑定和Repeater外部的链接按钮,因此不会处理这些表达式。您可以将它们更改为
<%= IsAdmin.ToString() %>
并获得您想要的结果。
检查此great blog entry以获取有关差异的更多信息。
此外,页面加载发生在页面呈现之前。渲染页面是ASP.Net页面生命周期中发生的最后一件事。