【问题标题】:ASP.NET Dynamically change markupASP.NET 动态更改标记
【发布时间】:2013-08-26 05:03:57
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    安全问题很大程度上取决于如何 会话[“变量”] 已设置。

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

    【讨论】:

    • +1。我不知道。比我的 Server.Transfer 解决方案更简单。
    【解决方案2】:

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

    对于您的解决方案,您可以使用&lt;asp:PlaceHolder /&gt; 控件。这将允许您在其中插入 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" 然后显示在代码中。如果控件不可见,那么它根本就没有呈现在页面上,因此没有安全风险。

    另一个是&lt;asp:Panel /&gt;,它在页面上呈现为&lt;div /&gt;。这与占位符的工作方式相同

    【讨论】:

    • 感谢您的回答,我现在就试试看。
    • 占位符控件不是为了这个,而是动态添加控件。另一方面,从 Control 继承的所有对象都有一个 Visible 属性,您可以将其设置为 false 而无需占位符。任何带有 runat=server 标记的控件都可以在后面的代码中将其可见属性设置为 false。
    • @Oscar 这正是占位符的目的。将控件动态添加到占位符与在标记中没有区别。
    • @TimBJames 来自 MSDN:“为以编程方式添加的控件保留页面控件层次结构中的位置。” msdn.microsoft.com/en-us/library/as54k8b6(v=vs.85).aspx
    • 谢谢,这行得通。但是,我更喜欢使用 div ,就像建议的其他答案一样。
    【解决方案3】:

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

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

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

    还有:

    a.InnerHtml = "def";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-26
      • 2016-08-21
      • 2022-01-21
      • 1970-01-01
      • 2020-01-04
      • 2011-11-10
      • 2011-10-09
      • 2023-04-04
      相关资源
      最近更新 更多