Request.QueryString
変数に基づいてcssテーマを設定しようとしています。使用するCssテーマを選択するための私のコードは関数にありますが、関数は評価されて出力がレンダリングされるのではなく、出力としてレンダリングされます。
を使用<%= GetCssTheme() %>
すると、次のようにレンダリングされます
<link href="Content/<%= GetCssTheme() %>.css" rel="Stylesheet">
ただし、使用すると、次<%= "" + GetCssTheme() %>
のように正しくレンダリングされます。
<link href="Content/ThemeA.css" rel="Stylesheet">
問題を説明する小さなサンプルを次に示します。
<%@ Page Language="vb" %>
<script language="vbscript" runat="server">
Public Function GetCssTheme() As String
Select Case Request.QueryString("SomeValue")
Case 2
Return "ThemeB"
Case 3
Return "ThemeC"
Case Else
Return "ThemeA"
End Select
End Function
</script>
<html>
<head runat="server">
<link href="Content/<%= GetCssTheme() %>.css" rel="Stylesheet" />
</head>
<body>
Test
</body>
</html>
関数名を機能させるために、関数名の前に空白の文字列を指定する必要があるのはなぜですか?
私は他のさまざまな方法も試しました:
二重引用符の代わりに一重引用符を使用する
使用する
<%= GetCssTheme().ToString() %>
使用する
<% Response.Write(GetCssTheme()) %>
使用する
<%
Dim s as String
s = GetCssTheme()
Response.Write(s)
%>
これらはすべて、ASP.Netコードを評価して結果を出力するのではなく、誤ってレンダリングします。
私が実際に機能するのは、関数を呼び出す代わりにインラインコードを使用するか、関数呼び出しに空白の文字列を追加することだけです。