在我的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#代码工作吗?
答案 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。