2009-12-22 37 views
0

我一直在玩弄默認的MVC 1網站,添加一些字段到註冊部分,用於在數據庫中創建一個輔助對象在註冊時間。ASP.NET MVC 1自定義模型在註冊頁面上,確認密碼沒有得到填充

我創建了視圖模型,包括用戶名,電子郵件,密碼和passwordConfirm屬性以及其他幾個。然後,我將該類型添加到註冊頁面上的inherits屬性中,並在控制器中將模型的新實例添加到ViewData.Model屬性。

問題是,當我將模型發回服務器時,無論我輸入什麼內容,passwordConfirm屬性都始終爲空。密碼屬性正確填寫,所有其他屬性也一樣。

是否有什麼特別的事情需要做以獲得passwordConfirm值來傳遞?

下面是相關代碼:

RegistrationViewModel.cs:

public class RegistrationViewModel 
{ 
    public string UserName { get; set; } 
    public string Password { get; set; } 
    public string PasswordConfirm { get; set; } 
    public string Email { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string DisplayName { get; set; } 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
    public string HomePhone { get; set; } 
    public string CellPhone { get; set; } 
    public string OtherPhone { get; set; } 
    public string Twitter { get; set; } 
    public string Bio { get; set; } 
    public string DOB { get; set; } 
} 

AccountController.cs:

public ActionResult Register() 
    { 
     ViewData.Model = new RegistrationViewModel(); 
     ViewData["PasswordLength"] = MembershipService.MinPasswordLength; 

     return View(); 
    } 

Register.aspx:

<% using (Html.BeginForm()) { %> 
    <div> 
     <fieldset> 
      <legend>Account Information</legend> 
      <p> 
       <label for="firstname">First Name:</label> 
       <%= Html.TextBox("firstname", Model.FirstName) %> 
       <%= Html.ValidationMessage("firstname") %> 
      </p> 
      <p> 
       <label for="lastname">Last Name:</label> 
       <%= Html.TextBox("lastname", Model.LastName) %> 
       <%= Html.ValidationMessage("lastname") %> 
      </p> 
      <p> 
       <label for="username">Username:</label> 
       <%= Html.TextBox("username", Model.UserName) %> 
       <%= Html.ValidationMessage("username") %> 
      </p> 
      <p> 
       <label for="email">Email:</label> 
       <%= Html.TextBox("email", Model.Email) %> 
       <%= Html.ValidationMessage("email") %> 
      </p> 
      <p> 
       <label for="zipcode">Zip Code:</label> 
       <%= Html.TextBox("zip", Model.Zip) %> 
       <%= Html.ValidationMessage("zip") %> 
      </p> 
      <p> 
       <label for="password">Password:</label> 
       <%= Html.Password("password", Model.Password) %> 
       <%= Html.ValidationMessage("password") %> 
      </p> 
      <p> 
       <label for="confirmPassword">Confirm password:</label> 
       <%= Html.Password("confirmPassword",Model.PasswordConfirm) %> 
       <%= Html.ValidationMessage("confirmPassword") %> 
      </p> 
      <p> 
       <input type="submit" value="Register" /> 
      </p> 
     </fieldset> 
    </div> 
<% } %> 

回答

2

默認的模型綁定行爲是通過匹配HTML元素名稱來查看模型屬性名稱來保存視圖模型。正如前面的答案指出的那樣,用於捕獲確認密碼的輸入元素名爲「confirmPassword」,視圖模型屬性爲「PasswordConfirm」。如果您更新代碼以使這些名稱匹配,則應在模型中看到確認密碼字符串。

+0

感謝您的快速解答。安迪先得到支票。 – 2009-12-22 15:45:09

1

這是視圖中的和模型中的PasswordConfirm。它會嘗試將名爲confirmPassword的字段序列化到模型中的ConfirmPassword,但不存在

2

您將輸入名爲confirmPassword,但該屬性名爲PasswordConfirm。這些需要同意。將您的輸入更改爲passwordConfirm並且它應該被正確綁定。