如何在没有回发的情况下访问ASP.NET代码中的HTML标记

时间:2015-03-27 12:06:27

标签: html css asp.net

我访问后面代码中元素的当前方式是使它们成为服务器。

示例

<div id="abc" runat="server" > Test </div>

然后在代码后面我可以简单地使用像abc.visible = false

这样的东西

然而,这似乎导致了回发。有什么方法可以从帖子中访问元素或禁用回发。

我想隐藏元素的原因是一些用户,因为他们的角色不应该看到这些元素。

3 个答案:

答案 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