无法将类型'string'隐式转换为Model

时间:2012-02-27 22:42:37

标签: asp.net-mvc-3 c#-4.0

我一直收到这些错误:

  

错误1无法将类型'string'隐式转换为'NSWebSite.Models.Role'

public Role GetRoleForUser (User user)
{
    if (!UserExists(user))
        throw new ArgumentException(MissingUser);

    return user.Roles.TargetRoleName;
}
  

错误2'NSWebSite.Models.User'不包含'RoleID'的定义

User newUser = new User()
{
    Name = name,
    Password = FormsAuthentication.HashPasswordForStoringInConfigFile(
        password.Trim(), "md5"),
    Email = email,
    RoleID = role.Id
};

错误1 - 我不知道如何解决,所以欢迎任何建议。

错误2 - 我收到它是因为我的用户模型不包含RoleID的定义。如果我想在创建新用户时设置角色,我应该在此处放置什么?

下面是我的存储库文件(从这里修改:brianleggDOTcom / post / 2011/05/09 /实现你自己的RoleProvider和MembershipProvider-in-MVC-3.aspx) - DOT =。 (大坝反垃圾邮件措施:-))

http://www.mediafire.com/?gey4y9ub0v2u9nh

和我的Model.Designer.cs文件

http://www.mediafire.com/?qa3p9we8uqwfj09

3 个答案:

答案 0 :(得分:0)

您的错误#2 只是意味着您的User类没有RoleID属性的定义。查看类定义,您可以在那里定义它。

您的错误#1 看起来有一个返回类型为Role的方法,而您正尝试这样做:

return user.Roles.TargetRoleName;  // this is a string???

如果您希望返回string,则需要像以下一样修改方法:

string YourMethodName(...any parameters you have...)
{
    // ...your code here
    return SomeRole;
}

或者您可以将TargetRoleName属性从string类型更改为Role

答案 1 :(得分:0)

我的第一个问题是:为什么这一切都在同一个班级?

我首先要对类进行排序:RoleUser等等。

您需要分别定义RoleUser的内容。

public class User {

  private String name;,
  private String password;
  private String email;
  private RoleID role;

  public User(String name, String password, String email, RoleID role) {
    this.name = name;
    this.password = password;
    this.email = email;
    this.role = role;
  }

  public void someOtherMethod() {
    //some code here, etc
  }

}

答案 2 :(得分:0)

我对MVC和C#的这一部分有点新鲜,来自原始示例:https://www.brianlegg.com/post/2011/05/09/Implementing-your-own-RoleProvider-and-MembershipProvider-in-MVC-3.aspx

我已将用户和角色的数据库架构从1更改为多对多关系。更改数据库方案并更新实体模式使得所有内容都能像原始博客文章一样再次发挥作用。

为什么原始海报没有将这两个类别分开,我不确定,但是一旦我按照自己的意愿工作,我就会开始考虑清理代码。如果有人对如何使上述网页的例子与用户和角色的多对多关系有任何建议,他们将不胜感激: - )