0

我在我的用户配置文件表中添加了一个名为 CoID (int) 的自定义列。当我想创建一个新用户时,我想将值 1 发送给 CoID,但我遇到了一些麻烦,无法让它正常工作。

我正在使用 mvc4 中的标准帐户表。

这是我的一些代码

AccountModel.cs

public class RegisterModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    [DataType(DataType.Custom)]
    [Display(Name = "CoID")]
    [Compare("CoID", ErrorMessage = "plese insert CoID")]
    public int CoID { get; set; }
}


[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public int CoID { get; set; }
}

AccountController.cs

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        model.CoID = 1;

        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password, model.CoID);
                WebSecurity.Login(model.UserName, model.Password);
                return RedirectToAction("Index", "Home");
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

执行此代码时,我收到此错误:

自定义数据类型字符串不能为 null 或空。

4

2 回答 2

0

我认为您对 WebSecurity.CreateUserAndAccount 的调用可能需要查看。

也许以下可能会更好:

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, 
    new { CoID = model.CoID });

从匿名对象中,它可以计算出您尝试将哪些值分配给哪些字段名称。否则你只是传递值,它不知道把它放在哪里。

于 2013-05-14T09:56:43.973 回答
0

删除 [DataType(DataType.Custom)] 或更改为 [DataType("CoID")]。

于 2015-04-21T15:47:44.257 回答