首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的RoleProvider行为

奇怪的RoleProvider行为
EN

Stack Overflow用户
提问于 2010-01-16 00:03:18
回答 1查看 116关注 0票数 1

我使用DataContext设置了一个角色提供者,如下所示。在我的视图中,我有以下用户控件...

代码语言:javascript
复制
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
    if (Request.IsAuthenticated) {
%>
        Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!
        <%= Html.ActionLink("Logout", "Logout", "Membership") %> | (
        <%
            var roles = System.Web.Security.Roles.GetRolesForUser(Page.User.Identity.Name);
            foreach (string role in roles)
                Html.Encode(role);
         %>
         )

现在如果我在我的本地机器上运行它,它工作得很好。请注意,连接到与我的远程机器相同的数据库。它登录并显示该成员所属的角色。

如果我在远程机器上运行,使用相同的数据库,它将登录并显示成员名称-但是...它不会渲染角色。你知道为什么会发生这种情况吗?我的角色提供者如下所示。

代码语言:javascript
复制
using System;
using System.Linq;

using System.Collections;
using System.Collections.Generic;

namespace Providers
{
    public partial class RoleProvider : System.Web.Security.RoleProvider
    {
        private readonly Models.Contexts.DatabaseDataContext dataContext;

        protected Models.Contexts.DatabaseDataContext DataContext
        {
            get { return dataContext; }
        }

        public RoleProvider()
            : base()
        {
            if (dataContext == null)
                dataContext = new DataContextProvider().GetDataContext<Models.Contexts.DatabaseDataContext>("contextProvider");
        }

        public RoleProvider(IDataContextProvider dataContextProvider)
            : this()
        {
            dataContext = dataContextProvider.GetDataContext<Models.Contexts.DatabaseDataContext>("contextProvider");
        }

        public override string[] GetRolesForUser(string email)
        {
            DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
            var member = (
                from m in DataContext.Users
                where m.Email == email
                select m).Single();

            List<string> roleList = new List<string>();
            foreach (Models.Group group in member.Groups)
                roleList.Add(group.Role.RoleName);

            return roleList.ToArray<string>();
        }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-16 00:53:40

老实说,我会从查看数据库中的数据差异开始,这听起来很愚蠢,但可能角色实际上并不存在,或者ApplicationIds是不同的。如有必要,对使用不同数据库的应用程序运行SQL Profiler,并验证查询是否相同以及返回的数据是否相同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2072924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档