C#的内联服务器代码在移动到JavaScript .js文件时无法工作

时间:2012-04-23 17:23:47

标签: c# javascript file inline

在我的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>

它失败了,因为它只是提供一个警告框     '&LT;%=会话[ “UserGuidAsString”]%GT;' 作为消息

我可以知道如何在JavaScript .js文件中使用服务器C#代码工作吗?

3 个答案:

答案 0 :(得分:4)

通过这个访问服务器变量

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

它不是Javascript的功能。

您也可以在没有js块的情况下编写此代码。 它像ASP代码.. 所以它的.aspx页面工作只能在javascript

答案 1 :(得分: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>

然后在您的js文件中,您只需使用guid变量。

答案 2 :(得分:1)

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

在你的特殊情况下(处理GUID),你真的不想走这条路,因为随着.js文件缓存的性质,你会遇到很多问题,确保它是一个新版本每次都服务。

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