这是场景,我希望单个页面根据会话变量显示不同的内容。问题是,我能想到的使用代码隐藏方法的唯一解决方案是隐藏显示内容的 div,但我不禁觉得它不安全。我想到的另一种方法是在标记中包含代码,就像在 PHP 中所做的那样,例如
<% if (Session["variable"].ToString() == "food") { %>
//Markup
<% } %>
那么您认为隐藏 div 没有安全风险,还是有更好的方法来使用代码隐藏动态更改内容?
这是场景,我希望单个页面根据会话变量显示不同的内容。问题是,我能想到的使用代码隐藏方法的唯一解决方案是隐藏显示内容的 div,但我不禁觉得它不安全。我想到的另一种方法是在标记中包含代码,就像在 PHP 中所做的那样,例如
<% if (Session["variable"].ToString() == "food") { %>
//Markup
<% } %>
那么您认为隐藏 div 没有安全风险,还是有更好的方法来使用代码隐藏动态更改内容?
安全问题在很大程度上取决于 Session["variable"] 的设置方式。
但是一个控件设置为 runat="server" 和 Visible=false; 甚至没有呈现给客户端,所以我认为这种方法没有问题。
在 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 />
呈现为 a<div />
的 。这将以与占位符相同的方式工作
也许您想使用Server.Transfer。在此处查看更多信息:Server.Transfer Vs。响应。重定向。
当然,您也可以简单地从代码隐藏中设置内容:
<p id="a" runat="server">
abc
</p>
和:
a.InnerHtml = "def";