2012-10-03 92 views
2

我有一个模型和该模型的一个枚举,我把它放在一起在asp.net mvc3中的视图模型就像这样。创建视图MVC3中的其他模型的对象组成的模型

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel.DataAnnotations; 


namespace FuelPortal.Models.DBModels 
{ 
    public class UserDBModel 
    { 

     public int userId { get; set; } 

     [Required, Display(Name = "User Name")] 
     public string userName { get; set; } 

     [Required, Display(Name = "Password")]   
     public string password { get; set; } 

     [Required, Display(Name = "First Name")] 
     public string firstName { get; set; } 

     [Required, Display(Name = "Last Name")] 
     public string lastName { get; set; } 

     [Required, Display(Name = "Email")] 
     public string email { get; set; } 

     [Display(Name = "Phone")] 
     public string phone { get; set; } 

     [Display(Name = "Account Expiration Date(Optional)")] 
     public DateTime expireDate { get; set; } 

     [Display(Name = "Password Expiration Date")] 
     public DateTime passwordExpireDate { get; set; } 

     [Display(Name = "Last Date Modified")] 
     public DateTime DateModified { get; set; } 

    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using FuelPortal.Models.DBModels; 

namespace FuelPortal.Models.ViewModels 
{ 
    public class UserMaintenanceViewModel 
    { 

     public UserDBModel user = new UserDBModel(); 
     public List<UserDBModel> userList = new List<UserDBModel>(); 
    } 
} 

现在我强烈地键入一个视图来使用视图模型。

@model FuelPortal.Models.ViewModels.UserMaintenanceViewModel 
<div class="frmBG"> 
     @using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "wrapperData" })) 
     { 

       <h5>Create New User</h5> 
       <br /> 
       <table cellpadding="2" cellspacing="10" border="0"> 
       <tr><td> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.user.userName) 
       </div></td><td> 

       <div class="editor-field"> 
        @Html.EditorFor(model => model.user.userName) 
        @Html.ValidationMessageFor(model => model.user.userName) 
       </div></td></tr> 

       <tr><td> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.user.password) 
       </div></td><td> 
       <div class="editor-field"> 
        @Html.PasswordFor(model => model.user.password) 
        @Html.ValidationMessageFor(model => model.user.password) 
       </div></td></tr> 

       <tr><td> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.user.firstName) 
       </div></td><td> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.user.firstName) 
        @Html.ValidationMessageFor(model => model.user.firstName) 
       </div></td></tr> 

       <tr><td> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.user.lastName) 
       </div></td><td> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.user.lastName) 
        @Html.ValidationMessageFor(model => model.user.lastName) 
       </div></td></tr> 

       <tr><td> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.user.email) 
       </div></td><td> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.user.email) 
        @Html.ValidationMessageFor(model => model.user.email) 
       </div></td></tr> 

       <tr><td> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.user.phone) 
       </div></td><td> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.user.phone) 
        @Html.ValidationMessageFor(model => model.user.phone) 
       </div></td></tr> 

       <tr><td> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.user.expireDate) 
       </div></td><td> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.user.expireDate) 
        @Html.ValidationMessageFor(model => model.user.expireDate) 
       </div></td></tr> 

       <tr><td></td><td> 
       <p> 
        <input type="submit" value="" class="create" /><input type="button" value="" class="close_tab"/> 
       </p></td></tr> 
       </table> 
     } 
    </div> 

由于某些原因,它不会在视图模型中填充对象。所以,当我创建一个后动作(UserMaintenanceViewModel模型)的所有值都为null。像这样..

[HttpPost] 
     public ActionResult CreateUser(UserMaintenanceViewModel model) 
     { 
      try 
      { 
       /// TODO: Add insert logic here 
       var result = repository.insertNewUser(Session["UserId"].ToString(), model.user.UserName, model.user.Password, model.user.FirstName, 
                 model.user.LastName, model.user.Email, model.user.Phone, model.user.ExpireDate); 
       // If result > 0 user insert successful 

另外,如果我切换到通过一个(的FormCollection形式)获得回发我看到html元素的名称是“user.UserName”而不是预期的“用户名”。任何指导将不胜感激我觉得我应该能够做到这一点。

非常感谢

+0

你尝试增加对UserDBModel参数? –

回答

3

如果你有一个复杂的视图模型这是你所拥有的,那么你必须确保在构造函数来创建对象的实例。您可以将信息添加到任何子对象,因为它现在有一个实例。

public class MyViewModel 
{ 


    public MyViewModel() 
    { 
     Customer= new CustomerViewModel(); 
     Address = new AddressViewModel(); 
    } 

    public int OrderNumber{ get; set; } 
    public CustomerViewModel Customer { get; set; } 
    public AddressViewModel Address { get; set; } 

} 

}

+0

这对我来说是一个非常愚蠢的错误。谢谢谢谢!我不能相信我没有提供访问器方法实例化对象。 – user1345632

+0

很高兴帮助。 –

相关问题