2016-12-26 2 views
-1

MVCアプリケーションを作成しています。 ViewModelを使用するViewを作成しており、コントローラが渡したこのビューのデータベースエンティティも使用しています。
コントローラ:mvc複数のモデルを表示する

public ActionResult AddGroup(AddGroupViewModel model) 
     { 
      ClassDeclarationsDBEntities1 entities=new ClassDeclarationsDBEntities1(); 
      return View(entities.Subjects.ToList()); 
     } 

はViewModelに:

public class AddGroupViewModel 
{ 
    [Required] 
    [Display(Name = "Subject")] 
    public string subject_name { get; set; } 

    [Required] 
    [Display(Name = "Number of Groups")] 
    public int qty { get; set; } 
} 

そして最後に私の見解:

@model List<ClassDeclarationsThsesis.Classes.Subject> 
@model ClassDeclarationsThsesis.Models.AddGroupViewModel 

@{ 
    ViewBag.Title = "Add Groups"; 
} 

<h2>Add Groups to subjects</h2> 

@using (Html.BeginForm("AddGroup", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
{ 
    @Html.AntiForgeryToken() 
    <h4>Create new groups.</h4> 
    <hr /> 
    @Html.ValidationSummary("", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @{ 
      List<SelectListItem> listItems1 = new List<SelectListItem>(); 

     } 
     @foreach (var subject in Model) 
     { 
      listItems1.Add(new SelectListItem 
      { 
       Text = subject.name, 
       Value = subject.name, 
       Selected = true 
      }); 
     } 
     @Html.LabelFor(m => m.subject_name, new {@class = "col-md-2 control-label"}) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(m => m.subject_name, listItems1, new {@class = "form-control"}) 
     </div> 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(m => m.qty, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.TextBoxFor(m => m.qty, new { @class = "form-control" }) 
     </div> 
    </div> 


    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" class="btn btn-default" value="Submit" /> 
     </div> 
    </div> 
} 

ご覧のように、私は私の見解では二つのモデルを使用しようとしています。しかし、例外を指定します(それらを区別する方法もあります)。これら2つのモデルをビューで結合するにはどうすればよいですか?
編集:
だから私は答えで提案するものでしたが、今私は、このような例外を取得:

{"The class 'ClassDeclarationsThsesis.Models.Subject' has no parameterless constructor."} 

クラスは次のようになります。

namespace ClassDeclarationsThsesis.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Subject 
    { 
     private int v; 
     private int userid; 

     public Subject(int v, int userid, string name) 
     { 
      this.class_id = v; 
      this.user_id = userid; 
      this.name = name; 
     } 


     public int class_id { get; set; } 
     public int user_id { get; set; } 
     public string name { get; set; } 

     public virtual Group Group { get; set; } 
     public virtual Subjects_Users Subjects_Users { get; set; } 
     public virtual Task Task { get; set; } 
    } 
} 

どのように私はそれを解決するのですか?

+0

'List 'タイプの 'AddGroupViewModel'にプロパティを作成しますか?または、これら2つのタイプのプロパティを持つビューモデルを作成し、それを使用しますか? 1つのタイプしか使用できませんが、好きなようにそのタイプをカスタマイズできます。 – David

+0

@Davidええ、しかし、私はデータベースから渡されたデータをどのように取得するのですか? –

+0

既に持っていて既にデータを取得するために使用している 'entities'オブジェクトから... – David

答えて

2

すでにビューモデルを持っているので、私はそれを使用したい:

@model ClassDeclarationsThsesis.Models.AddGroupViewModel 

そして、単にあなたがまた使いたい収集のためにそのビューモデルにプロパティを追加します。

public class AddGroupViewModel 
{ 
    [Required] 
    [Display(Name = "Subject")] 
    public string subject_name { get; set; } 

    [Required] 
    [Display(Name = "Number of Groups")] 
    public int qty { get; set; } 

    public List<Subject> Subjects { get; set; } 
} 

次に、コントローラからそのインスタンスを作成してビューに送信します。

var entities = new ClassDeclarationsDBEntities1(); 
var model = new AddGroupViewModel(); 
model.Subjects = entities.Subjects.ToList(); 
// set your other properties too? 
return View(model); 

ビューsimp基本的には

@foreach (var subject in Model.Subjects) 

のビューに利用できる唯一のModelプロパティをありますので、あなたは(あなたのモデルのために一種類のみを使用することができますが、:あなたがそのコレクションを必要とするときlyが、モデル自身ではなくModelのプロパティを参照してください。フレームワーク)、そのタイプはあなたが好きなもの、たとえあなたが定義したカスタムビューモデルタイプであってもかまいません。

関連する問題