0

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

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

那么您认为隐藏 div 没有安全风险,还是有更好的方法来使用代码隐藏动态更改内容?

4

3 回答 3

3

安全问题在很大程度上取决于 Session["variable"] 的设置方式。

但是一个控件设置为 runat="server" 和 Visible=false; 甚至没有呈现给客户端,所以我认为这种方法没有问题。

于 2013-08-25T20:01:06.533 回答
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 />呈现为 a<div />的 。这将以与占位符相同的方式工作

于 2013-08-25T19:59:40.580 回答
-1

也许您想使用Server.Transfer。在此处查看更多信息:Server.Transfer Vs。响应。重定向。

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

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

和:

a.InnerHtml = "def";
于 2013-08-25T20:12:56.920 回答