1

私のC#コードビハインドページには、次のものがあります。

MembershipUser currentUser = Membership.GetUser(false);

HttpContext.Current.Session["UserGuidAsString"] = currentUser.ProviderUserKey.ToString();

対応するASPXページの下部に、次のコードがあります。

</form>
<script type="text/javascript"> var userGuidAsString = '<%=Session["UserGuidAsString"]%>';
                                alert(userGuidAsString);
</script>
</body>
</html>

これにより、適切な期待される結果が得られます。これは、ページを実行したときにユーザーのGUIDが表示されたアラートボックスです。

JavaScriptコードを.jsファイルに移動して、コードをよりモジュール化して整理したいと思いました。次の内容のtest.jsjavascriptファイルを作成しました。

var userGuidAsString = '<%=Session["UserGuidAsString"]%>';
alert(userGuidAsString);

また、ASPXページを変更して、test.jsjavascriptファイルが含まれるようにしました。

</form>
    <script src="/Scripts/test.js" type="text/javascript"></script>
    </script>
</body>
</html>

'<%= Session ["UserGuidAsString"]%>'をメッセージとして含むアラートボックスを表示するだけなので失敗します

インラインサーバーのC#コードをJavaScript.jsファイル内で機能させる方法を教えてください。

4

3 に答える 3

4

これにより、アクセスするサーバー変数

'<%=Session["UserGuidAsString"]%>'

Javascriptの機能ではありません。

jsブロックなしでもこのコードを書くことができます..そのようなASPコード..したがって、JavaScriptではなく.aspxページでのみ動作します

于 2012-04-23T17:27:53.407 に答える
1

.jsファイルがクライアントに到達する前にC#がサーバーで実行されるようにするには、そのページ拡張子をIISに登録して、asp_net.dllが.jsファイルを処理するようにする必要があります。

特定のケース(GUIDの処理)では、このルートを使用したくありません。.jsファイルのキャッシュの性質上、新しいバージョンが毎回提供されることを保証するために多くの問題が発生するためです。時間。

AJAXまたは同等のものを使用して、たとえばGetUserGuidAsString.aspxを呼び出す非常に単純な(そして、はい、モジュラー/再利用可能な)JS関数を再作成することをお勧めします。

于 2012-04-23T17:31:17.907 に答える
1

これに対する一般的な回避策は、サーバー変数をhtmlの非表示要素に配置することです。例えば:

<input type="hidden" id='guid' value='<%=Session["UserGuidAsString"]%>' />

次に、JavaScriptファイル:

var guid = document.getElementById("guid").value;

または、htmlでjs変数を定義し、それをjsファイルで参照することもできます。参照する前に、必ず変数を宣言してください。

<script type="text/javascript">
    var guid = '<%=Session["UserGuidAsString"]%>';
</script>
<script type="text/javascript" src="yourScript.js></script>

guid次に、jsファイルで変数を使用できます。

于 2012-04-23T17:30:29.280 に答える