2010-08-25 32 views
0

我在實現ViewModel類時出現問題,該類用作圍繞由L2SQL生成的名爲「用戶」的Model類的包裝類。總之,當我必須針對L2SQL模型進行驗證時,我有兩個實例。一個是用戶首次註冊時,另一個是用戶登錄並僅編輯他的部分賬戶數據。ViewModel驗證對象與L2SQL生成的模型類問題

初始「問題」嘗試編輯&驗證只有一些針對從View只顯示幾個(如名字,姓氏,電子郵件)時,缺少的原L2SQL模型帳戶詳細信息時,被(如密碼)將在驗證運行時亮起來。密碼設置將有其自己的視圖。

我在這裏建議StackOverflow添加一個包裝ViewModel類將是最好的解決方案。所以,我沒有,下面執行:

視圖模型代碼:

[Bind] 
public class AccountEdit 
{ 
    public User UserAccount { get; set; } 

    [Required(ErrorMessage = "First name required"), StringLength(20, MinimumLength = 3, ErrorMessage = "Must be between 3 and 20 characters")] 
    public string FirstName { get { return UserAccount.FirstName; } set { UserAccount.FirstName = value; } } 

    [Required(ErrorMessage = "Last name required"), StringLength(20, MinimumLength = 3, ErrorMessage = "Must be between 3 and 20 characters")] 
    public string LastName { get { return UserAccount.LastName; } set { UserAccount.LastName = value; } } 

    [Required(ErrorMessage = "Email address required"), RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$", ErrorMessage = "Must be a valid email address")] 
    public string Email { get { return UserAccount.Email; } set { UserAccount.Email = value; } } 
} 

控制器代碼:

// 
// GET /User/Account 
public ActionResult Account() 
{ 
    string cookieUser = User.Identity.Name; 
    User user = userRepository.GetUserByEmail(cookieUser); 
    return View(user); 
} 

// POST /User/Account 
[HttpPost] 
public ActionResult Account(AccountEdit model) 
{     
    if (ModelState.IsValid) 
    { 
     model.LastUpdated = DateTime.Now; 
     userRepository.Save(); 
    } 
    return View(model); 
} 

教職員代碼:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/User.Master" Inherits="System.Web.Mvc.ViewPage<Digitalent.Models.User>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Account settings 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<% using (Html.BeginForm()) {%> 

    <%= Html.ValidationSummary("Oops! Please correct the errors and try again!") %> 

     <p> 
      <label for="FirstName">First name:</label> 
      <%: Html.TextBoxFor(model => model.FirstName, new { @class = "textfield" })%> 
      <%: Html.ValidationMessageFor(model => model.FirstName) %> 
     </p> 

     <p> 
      <label for="LastName">Last name:</label> 
      <%: Html.TextBoxFor(model => model.LastName, new { @class = "textfield" })%> 
      <%: Html.ValidationMessageFor(model => model.LastName) %> 
     </p> 

     <p> 
      <label for="Email">Email address:</label> 
      <%: Html.TextBoxFor(model => model.Email, new { @class = "textfield" })%> 
      <%: Html.ValidationMessageFor(model => model.Email) %> 
     </p> 

     <p> 
      Email newsletter: <%= Html.CheckBoxFor(model => model.EmailNewsletter) %> 
      <label for="EmailNewsletter">Keep me posted with latest Digitalent happenings.</label> 
     </p> 


     <p> 
      <input type="submit" value="Save changes" class="button" /> 
     </p> 

     <p><a href="/talent/password">Change your password settings</a></p> 

<% } %> 

但現在,當我試圖運行該應用程序運行驗證時出現錯誤:

'對象引用未設置爲對象的實例'。

在我的ViewModel下面一行:

「公共字符串名字{{返回UserAccount.FirstName; } set {UserAccount.FirstName = value; }}'

我哪裏錯了,或者別人能告訴我一個更好的推薦方法,因爲我是新手。請幫助!

回答

0

更改您的視圖來自:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/User.Master" 
    Inherits="System.Web.Mvc.ViewPage<Digitalent.Models.User>" %> 

到:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/User.Master" 
    Inherits="System.Web.Mvc.ViewPage<Digitalent.Models.AccountEdit>" %> 
+0

,如果我做我得到這個錯誤: 「傳遞到字典的模型項的類型爲「Digitalent.Models .User',但這個字典需要一個'Digitalent.Models.AccountEdit'類型的模型項目。「 我需要使用「Digitalent.Models.User」在GET視圖實例中首先填充字段。 – shahidaltaf 2010-08-25 16:21:54

+0

我需要在GET視圖中更改任何內容嗎? – shahidaltaf 2010-08-25 16:24:14