【问题标题】:Problems with roles角色问题
【发布时间】:2016-04-11 19:33:49
【问题描述】:

我正在学习老师建议的本教程,以了解角色Roles的工作

问题是我一步一步做对了,但在最后一步我无法让它工作,因为它说:Default parameter 'value' for context must be a compile time constant我尝试了一切,但我不知道为什么它不起作用。如果有人可以提供解决此问题的提示,我将不胜感激。

家庭控制器

using (var context = new ApplicationDbContext())
{
    var roleStore = new RoleStore<IdentityRole>(context);
    var roleManager = new RoleManager<IdentityRole>(roleStore);

    roleManager.Create(new IdentityRole("Admin"));

    var userStore = new UserStore<ApplicationUser>(context);
    var userManager = new UserManager<ApplicationUser>(userStore);

    var user = userManager.FindByEmail("my.email@somewhere.com");
    userManager.AddToRole(user.Id, "Admin");
    context.SaveChanges();
}

【问题讨论】:

  • 很可能有一个方法接受一个参数,该参数具有一个应该在最近评估的默认值。它不在您粘贴的代码中。
  • 您的用户变量返回预期值?你之前插入用户了吗?尝试调查 InnerException。
  • 问题出在上下文中,顺便说一下,我在使用之前使用了@,它让我使用了 var,我认为这部分已经完成,但是我遇到了异常问题

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

我认为问题出在var context = new ApplicationDbContext()。 C# 期望默认值是“编译时常量”,其中包括诸如数字和字符串文字之类的内容,并且不包括类的新实例或方法调用的返回值。我能想到的最简单的方法是用ApplicationDbContext context = null 替换参数(null 可以是默认值,因为它是一个编译时间常数)并将行添加到方法主体if(context == null){ context = new ApplicationDbContext(); }

【讨论】:

  • 还有一个问题,说方法必须有一个返回类型,我使用不知道为什么它要求返回类型:S
  • 当我在 homeController 中添加 using... 时就会发生这种情况:S
  • 在 C# 中,每个方法都必须声明它返回的内容。如果不应该返回任何东西,返回类型为void,语法如下:void myMethod(/*arguments*/) {/*body*/}
  • 但是当我放置@using语句并且无法解决它时,他在我上面的方法中调用了返回类型,它不允许我在homeController中使用它:S
  • 正确。您在定义中声明返回类型,而不是调用。在您的情况下,定义(当您键入方法时)看起来像 void @using(...,调用(在 homeController 内部)看起来像 @using(...
猜你喜欢
  • 2020-12-31
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多