2012-03-22 15 views
0

私はMVCにはまったく新しいですが、2段階のユーザー登録システムをセットアップしようとしています。私は登録モデルといくつかの他のモデルを登録と呼ばれるビューモデルに持っています。ユーザーは登録モデルに基づいたプロファイルを持っており、それらが属するプロデューサー/ディストリビューター/レストラン/輸入業者を選択するか、それらの新しいモデルを作成します。返されたViewModelは、ドロップダウンリストの値の検証や取得を行いません。それらは正しく配置されますが、ポストではVMにはありません。以下は私のビュー/コントローラ/とモデルです。私は運がない2日間ネットを検索してきました。また、私の登録方法が不愉快だと思うなら、私に知らせてください。ありがとう!MVC 3 Dropdowns&Multiple Model ViewModel

コントローラ:

public class RegistrationController : Controller 
{ 
    private vfContext db = new vfContext(); 
    // 
    // GET: /Registration/ 

    public ActionResult Register() 
    { 
     ViewBag.UserTypeID = new SelectList(db.UserTypes, "UserTypeID", "Name"); 
     ViewBag.ProducerID = new SelectList(db.Producers, "ProducerID", "Name"); 
     ViewBag.PublicationID = new SelectList(db.Publications, "PublicationID", "Name"); 
     ViewBag.ImporterID = new SelectList(db.Importers, "ImporterID", "Name"); 
     ViewBag.DistributorID = new SelectList(db.Distributors, "DistributorID", "Name"); 
     ViewBag.RestaurantID = new SelectList(db.Restaurants, "RestaurantID", "Name"); 

     RegistrationViewModel reg = new RegistrationViewModel(); 

     ViewData.Model = reg; 

     return View("Registration"); 
    } 

    [HttpPost] 
    public ActionResult Register(RegistrationViewModel vm) 
    { 
     if (ModelState.IsValid) 
     { 
      MembershipCreateStatus createStatus; 
      //email is userid 
      Membership.CreateUser(vm.Register.Email, vm.Register.Password, vm.Register.Email, null, null, true, null, out createStatus); 

      if (createStatus == MembershipCreateStatus.Success) 
      { 
       Profile current = Profile.GetProfile(vm.Register.Email); 
       current.FirstName = vm.Register.FirstName; 
       current.LastName = vm.Register.LastName; 
       current.Address1 = vm.Register.Address1; 
       current.Address2 = vm.Register.Address2; 
       current.City = vm.Register.City; 
       current.State = vm.Register.State; 
       current.Postal = vm.Register.Postal; 
       current.UserTypeID = vm.Register.UserTypeID; 

ビュー - ので、ここで、私はそれを上にコピーする苦労を抱えているので、問題はのDDLであるが、私は、ユーザーのid型1

@model vf2.Models.RegistrationViewModel 
       <div class="editor-label"> 
       @Html.LabelFor(model => model.Register.UserTypeID, "User Type") 
      </div> 
      <div class="editor-field"> 
       @Html.DropDownList("UserTypeID", String.Empty) 
       @Html.ValidationMessageFor(m => m.Register.UserTypeID) 
      </div> 
を行っている方法です

モデル:

public class RegistrationViewModel 
{ 
    public RegisterModel Register { get; set; } 
    public Producer Producer { get; set; } 
    public Distributor Distributor { get; set; } 
    //public Publication Publication { get; set; } 
    public Restaurant Restaurant { get; set; } 
    public Importer Importer { get; set; } 
} 

は、ここに私のレジスタモデルです。

public class RegisterModel 
{ 
    //[Required] 
    //[Display(Name = "User name")] 
    //public string UserName { get; set; } 

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

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

    [Display(Name = "Address")] 
    public string Address1 { get; set; } 
    [Display(Name = "Address Cont.")] 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Postal { get; set; } 
    public string Country { get; set; } 

    [DataType(DataType.PhoneNumber)] 
    public string Phone { get; set; } 

    public int ProducerID { get; set; } 
    public int DistributorID { get; set; } 
    public int PublicationID { get; set; } 
    public int ImporterID { get; set; } 
    public int RestaurantID { get; set; } 

    public virtual Producer Producer{ get; set; } 
    public virtual Distributor Distributor { get; set; } 
    public virtual Publication Publication { get; set; } 
    public virtual Importer Importer { get; set; } 
    public virtual Restaurant Restaurant { get; set; } 

    [Required] 
    public int UserTypeID { get; set; } 
    public virtual UserType UserType { get; set; } 

    [Required] 
    [DataType(DataType.EmailAddress)] 
    [Display(Name = "Email address")] 
    public string Email { get; set; } 


    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 
} 

生産モデル:

public class Producer 
{ 
    public int ProducerID { get; set; } 

    public string Name { get; set; } 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Postal { get; set; } 
    public string Country { get; set; } 

    [DataType(DataType.PhoneNumber)] 
    public string Phone { get; set; } 

    [DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 

    public string Website { get; set; } 

    public string CreatedBy { get; set; } 
    public DateTime CreatedOn { get; set; } 
    public string UpdatedBy { get; set; } 
    public DateTime? UpdatedOn { get; set; } 
    public Boolean Active { get; set; } 


    public virtual ICollection<Wine> Wines { get; set; } 

} 

答えて

0

私は私のviewmodelに以下を追加することで、これを考え出したと思う:

 public IEnumerable<UserType> UserTypes { get; set; } 
    public IEnumerable<Producer> Producers { get; set; } 

し、その後これを私の見解に:

@Html.DropDownListFor(m=>m.Register.UserTypeID,new SelectList(Model.UserTypes,"UserTypeID","Name"),"Select account type") 
関連する問題