来自ASP.NET的MVC3成员资格转换

时间:2011-08-09 17:32:24

标签: asp.net-mvc-3 asp.net-membership asp.net-profiles

我正在将一个Web应用程序从asp.net转换为MVC3,并试图找出如何设置和访问旧应用程序中配置的配置文件属性。

我可以从旧应用程序访问数据库,我可以使用

使用MVC3创建新用户
Membership.CreateUser(model.UserName, model.Password, model.Email, model.SecretQuestion, model.SecretAnswer, true, out createStatus);

这个新用户被放在数据库“USER”表中。我还需要存储有关用户的其他信息,我仍然必须使用在旧应用程序中创建的旧数据库,因此当我们切换到新应用程序时,当前用户仍然可以登录而不会注意到除了某些布局改进之外的更改。

旧数据库中还有一个名为“PROFILE”的表,它存储了其他值,如此

UserId,PropertyNames,PropertyValuesString,PropertyValuesBinary,LastUpdatedDate

DB7E1F8E-FB45-49E5-A2AF-C83A371CC22F,PartnerID:S:0:2:FirstName:S:2:4:LastName:S:6:12:Indexed:S:18:1:,26MiloMinderbinder3,0x, 2010-09-29 21:23:33.737

这是使用在MVC3中不可用的MembershipWizard创建的。我需要找到一种方法来创建具有MVC3的用户,并仍然向该表添加适当的值。

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

您可以创建自己的Membership类...尝试实现MembershipProvider类并在Web.Config中注册它...

这是处理会员资格的非常灵活的方式。我一直都在使用它......

答案 1 :(得分:0)

默认的MVC 3互联网应用程序模板在创建用户的界面中包含一个方法:

public interface IMembershipService
{
    int MinPasswordLength { get; }

    bool ValidateUser(string userName, string password);
    MembershipCreateStatus CreateUser(string userName, string password, string email);
    bool ChangePassword(string userName, string oldPassword, string newPassword);
}

其实施方式为:

        public MembershipCreateStatus CreateUser(string userName, string password, string email)
    {
        if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");
        if (String.IsNullOrEmpty(password)) throw new ArgumentException("Value cannot be null or empty.", "password");
        if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email");

        MembershipCreateStatus status;
        _provider.CreateUser(userName, password, email, null, null, true, null, out status);
        return status;
    }

所以 - 你需要

  1. 将新参数添加(或更改现有方法)到方法签名

  2. 将参数添加到接口方法(或在界面上创建新方法)

  3. 将函数调用更改为_provider.CreateUser以传入参数