2013-02-06 36 views
2

我想添加到MVC 4開箱的會員資格。無效的列名'長度'編輯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,我只是沒有看到連接。這似乎是這樣一個簡單的錯誤,但。該數據庫設置爲Nvarchar(MAX)這是爲了避免此錯誤。

Invalid column name 'Length' 

回答

4

,看來你使用

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, model.Mobile); 

如果你看一下msdn

public static string CreateUserAndAccount(
    string userName, 
    string password, 
    Object propertyValues, 
    bool requireConfirmationToken 
) 

其中propertyValues是

propertyValues 類型:System.Object (可選)包含其他用戶a的字典ttributes。缺省值爲空。

所以隨着您的方法的使用,model.Mobile作爲propertyValues參數發送,它當然不是!

因此,您應該創建自己的CreateUserAndAccount過載(或新方法),您可以在其中使用移動參數。

+0

Althaus我不得不說你的權利,但我真的不明白如何做到這一點。當我閱讀時,我覺得我必須將這些值放入字典中,並將字典作爲propertyValues傳遞給'CreateUserAndAccount'。當我厭倦了它不起作用。 – jackncoke

0

我不認爲這是什麼它指的是......這似乎是做了所謂的「長度」 ......我會懷疑列名的查詢是保留關鍵字確定一個字符串的長度和導致你的錯誤。你有這樣的列名引用嗎?

您的評論
+0

不是我所知道的。模型上沒有驗證註釋。我可以傳遞額外的值到'WebSecurity.CreateUserAndAccount(model.UserName,model.Password,model.Mobile);'?你有什麼建議可以在這裏找到? – jackncoke

+0

它在那裏突破,所以我認爲它會從模型中拉出來嗎? – jackncoke

6

它實際上引發錯誤,因爲它預計的附加屬性的字典 - 嘗試:

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new{model.Mobile}, false) 

這是假設你有一個名爲移動在UserProfileTable列。如果你想指定一個不同的列名:

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new{YourColumnName = model.Mobile}, false)