我访问后面代码中元素的当前方式是使它们成为服务器。
示例
<div id="abc" runat="server" > Test </div>
然后在代码后面我可以简单地使用像abc.visible = false
这样的东西然而,这似乎导致了回发。有什么方法可以从帖子中访问元素或禁用回发。
我想隐藏元素的原因是一些用户,因为他们的角色不应该看到这些元素。
答案 0 :(得分:2)
为什么不使用LoginView?
<asp:LoginView ID="LoginView1" runat="server">
<RoleGroups>
<asp:RoleGroup Roles="Admin">
<ContentTemplate>
Content visible to Admin role
</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="User">
<ContentTemplate>
Content visible to User role
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
或者您可以将内容放在像placeholder
这样的服务器端控件中,并检查“如果用户在角色中”,然后将其显示为可用。
在您的页面中,您将占位符和角色特定内容放入其中:
<asp:PlaceHolder ID="AdminPlaceholder" runat="server">
Admin Only Content
</asp:PlaceHolder>
<asp:PlaceHolder ID="UserPlaceholder" runat="server">
Admin Only Content
</asp:PlaceHolder>
然后你在代码隐藏中显示和隐藏它们:
if (User.IsInRole("Admin"))
{
// Make Admin content visible here
AdminPlaceholder.Visible = true;
UserPlaceholder.Visible = true;
}
else if (User.IsInRole("User"))
{
// Make User content visible and hide Admin content
AdminPlaceholder.Visible = false;
UserPlaceholder.Visible = true;
}
else
{
// Login Please
}
因此,回发将无关紧要,因为服务器将决定向哪个用户展示什么..
答案 1 :(得分:2)
这不会导致回发,但如果您不在服务器上,则无法从服务器端访问元素。如果你只是想隐藏它们客户端,你可以使用javascript / jQuery和/或CSS。但是,Visible=false
(服务器端)的元素根本不存在于客户端。
因此,runat=server
不会导致更多的回发。它只是说ASP.NET必须在服务器内存中创建一个控件,以便您能够在那里访问它。
但如上所述,如果您想在没有回发的情况下更改客户端的可见性,则无法使用Visible=false
。然后使用CSS或类或内联:
abc.Attributes.Add("style", "display:none");
或没有代码隐藏:
<div id="abc" style="display:none"> Test </div>
现在您可以从客户端访问它,即使它不可见,例如切换可见性。
答案 2 :(得分:0)
如果要避免客户端和服务器之间的所有通信,可以使用客户端JavaScript隐藏元素。另一个选项是ASP.NET页面方法,它不会发回整个页面。它们只是在Javascript函数和ASP.NET方法之间发送所需的数据。 PageMethods In ASP.NET AJAX