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.js javascript 文件:

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

我还修改了 ASPX 页面,使其包含 test.js javascript 文件:

</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 代码.. 所以它只能在 .aspx 页面上工作,而不是在 javascript 中

于 2012-04-23T17:27:53.407 回答
1

一个常见的解决方法是将 server 变量放在 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>

然后在您的 js 文件中,您可以简单地使用该guid变量。

于 2012-04-23T17:30:29.280 回答
1

为了在 .js 文件到达客户端之前在服务器上执行 C#,您必须在 IIS 中注册该页面扩展名,以便 asp_net .dll 处理 .js 文件。

在您的特定情况下(处理 GUID),您真的不想走这条路,因为 .js 文件缓存的性质,您将遇到很多问题,以确保它是每个都提供的新版本时间。

我建议重新创建一个非常简单(是的,模块化/可重用)的 JS 函数,该函数使用 AJAX 或等效方法调用例如 GetUserGuidAsString.aspx。

于 2012-04-23T17:31:17.907 回答