0

シナリオは次のとおりです。セッション変数に応じて、1 つのページに異なるコンテンツを表示したいと考えています。問題は、コード ビハインド メソッドを使用するために考えられる唯一の解決策は、コンテンツを表示する div を非表示にすることですが、安全ではないと感じずにはいられません。私が考えているもう1つの方法は、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"、コードに表示されるようにします。コントロールが表示されない場合は、ページにまったく表示されないため、セキュリティ上のリスクはありません。

もう 1 つは、ページ上で<asp:Panel />としてレンダリングされる<div />です。これは、プレースホルダーと同じように機能します

于 2013-08-25T19:59:40.580 に答える
-1

おそらく、 Server.Transferを使用したいでしょう。詳細については、こちらを参照してください: Server.Transfer Vs. Response.Redirect

もちろん、分離コードからコンテンツを設定することもできます。

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

と:

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