ASP.NET动态更改标记

时间:2013-08-25 19:53:18

标签: c# asp.net .net code-behind

在这个场景中,我希望单个页面根据会话变量显示不同的内容。问题是,我能想到的使用代码隐藏方法的唯一解决方案是隐藏显示内容的div,但我无法帮助但感觉它不安全。我想到的另一种方法是像在PHP中一样在标记中包含代码,例如

<% if (Session["variable"].ToString() == "food") { %>
   //Markup
<% } %>

那么您认为隐藏div并不存在安全风险,或者是否有更好的方法可以使用代码隐藏来动态更改内容?

3 个答案:

答案 0 :(得分:3)

安全问题在很大程度上取决于方式     会话[“变量”] 已设定。

但是控件设置为runat =“server”和     可见= FALSE; 甚至没有呈现给客户端,所以我认为这种方法没有问题。

答案 1 :(得分:1)

在asp.net中,有各种控件可用于根据不同的变量显示不同的内容。

对于您的解决方案,您可以使用<asp:PlaceHolder />控件。这将允许您将HTML标记和其他控件插入其中,然后在您可以显示/隐藏的代码中,具体取决于您的变量。

所以.aspx页面上的标记会是;

<asp:PlaceHolder runat="server" id="phOne" visible="false">
    <p>Show Me if condition is met</p>
</asp:PlaceHolder>

然后在你的代码后面你可以显示/隐藏;

this.phOne.visible = Session["variable"].ToString() == "food";

我会确保默认情况下它不可见visible="false"然后显示在代码中。如果控件不可见,那么它根本不会在页面上呈现,因此没有安全风险。

另一个是<asp:Panel />,它在页面上呈现为<div />。这将与占位符

的工作方式相同

答案 2 :(得分:-1)

也许你想使用Server.Transfer。在此处查看更多相关信息:Server.Transfer Vs. Response.Redirect

当然,您也可以简单地设置代码隐藏的内容:

<p id="a" runat="server">
    abc
</p>

a.InnerHtml = "def";