我正在尝试向MVC 4添加开箱即用的成员资格。
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, model.Mobile);
//I added model.Mobile
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
}
我换了型号
public class RegisterModel
{
// Username and password methods
public string Mobile { get; set; }
}
我还将其添加到了UserProfile
模型中。我收到一个SqlException,只是看不到连接。这似乎是一个简单的错误。DB设置为Nvarchar(MAX)
,这是为了避免此错误。
Invalid column name 'Length'
它实际上抛出了错误,因为它需要一个附加属性的字典-try:
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new{model.Mobile}, false)
这假设在UserProfileTable中有一个名为Mobile的列。如果您想指定不同的列名:
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new{YourColumnName = model.Mobile}, false)
在您的评论中,似乎您使用了
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, model.Mobile);
如果你看看msdn,
public static string CreateUserAndAccount(
string userName,
string password,
Object propertyValues,
bool requireConfirmationToken
)
其中propertyValues是
属性值类型:System.Object(可选)包含其他用户属性的字典。默认值为null。
因此,在使用该方法时,请建模。Mobile是作为propertyValues
参数发送的,当然不是!
因此,您应该创建自己的CreateUserAndAccount
重载(或一种新方法),在其中可以使用mobile参数。
我不认为这是它所指的…它似乎在查询一个名为"LENGTH"的列名称。。。我怀疑这是一个用于确定字符串长度的保留关键字,并导致您的错误。你有这样的列名参考吗?