我们正在开发一个 Sitefinity 项目,并试图找出如何获取将显示在 div 内的用户电子邮件。我们正在开发的网站很旧并且有很多问题,但这似乎是一个简单的请求。
这是我们实现的代码:
.母版页(客户端):包含 JS 和 div 的链接,用于保存输出。
<head runat="server">
<title></title>
<!-- Include your other head content -->
<script src="~/Scripts/userEmailScript.js" type="text/javascript"></script>
</head>
<body>
<form id="form1" runat="server">
<!-- Your HTML content -->
<div class="col-md-12">
<div id="userEmailDiv"></div>
</div>
</form>
JS文件
document.addEventListener("DOMContentLoaded", function() {
var userEmail = "<%= UserEmail %>";
var userEmailElement = document.getElementById("userEmailDiv");
if (userEmailElement) {
userEmailElement.innerText = userEmail;
}
});
.cs页面(服务器端)
using System;
using Telerik.Sitefinity.Security;
using Telerik.Sitefinity.Security.Model;
namespace YourNamespace
{
public partial class YourPage : System.Web.UI.Page
{
protected string UserEmail { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Your server-side C# code here
// For example, fetching user email
UserManager userManager = UserManager.GetManager();
SitefinityProfile profile = userManager.GetUserProfile(); // Assuming the user is logged in
UserEmail = profile.Email;
}
}
}
}
刷新页面后,我们会得到以下值:<%= UserEmail %>,而不是实际的电子邮件地址。我的猜测是问题出在服务器端代码中。我研究了文档,但找不到解决方案或修复程序。有什么见解吗?谢谢你。
这里有几个问题:
这个标签:
<%= UserEmail %>
只能在母版页或用户控件(ascx)中使用,但不能在.js文件中使用。
如果您启用了输出缓存(默认情况下),那么用户将由于缓存而看到其他用户的电子邮件。
因此,您可以在 DomContentLoaded 事件处理程序中调用此 api: /rest-api/login-status,这将为您提供登录用户的电子邮件和显示名称(如果有)。查看您的 sitefinity 版本是否有此 api 端点,如果没有,您可以查看 LoginStatus 小部件并查看它正在使用哪个端点。