我正在使用基于SimpleMembership的自定义成员资格提供程序以及ASP.NET的DefaultRoleProvider。每次将新项目添加到数据库时,我都希望向站点管理员发送电子邮件。
这是用户的模型:
public class Users
{
public int UserId { get; set; }
public string UserName { get; set; }
public string FullName { get; set; }
public string Email { get; set; }
public IEnumerable<Role> Roles { get; set; }
}
我已尝试使用以下代码将管理员角色中每个用户的UserName列入ViewData,并且工作正常:
string userRoles = string.Concat(Roles.GetUsersInRole("Administrator"));
ViewData.Add("UserRoles", userRoles);
如何将Email字段而不是UserName输出到ViewBag中并将它们返回到名为UserMailer的类中?
答案 0 :(得分:1)
对于每个用户名,您必须从成员资格中检索用户对象并使用来自用户对象的电子邮件。
MembershipProvider有方法GetUser(string username, bool UpdateLastSeenTimestamp)
。这会返回一个具有MembershipUser
属性的对象Email
。
因此,对于从角色提供程序返回的每个用户名,您都需要调用该方法:
// pseudocode, not tested
var usernames = Roles.GetUsersInRole("Administrator");
var users = new List<MembershipUser>();
var emails = new List<String>();
foreach(var username in usernames){
var user = MembershipProvider.GetUser(username, false);
users.Add(user);
emails.Add(user.Email);
}
所以users
包含用户对象列表 - 如果你需要它们的话。 emails
将包含这些用户的电子邮件列表。
P.S。不要使用ViewData
将电子邮件传递给您的组件(Mailer)。 ViewData
仅用于向/从视图传递信息,而不是在您的类之间传递信息。