2016-04-03 11 views
-2

こんにちはは同じビューのために別のモデルプロパティにアクセスすることは可能ですmvc4の同じビューで異なるモデルプロパティにアクセスする方法は可能ですか?

マイVisitorsViewModelモデル

public DateTime FromDate { get; set; } 
    public DateTime ToDate { get; set; } 

マイView_VisitorsFormモデル

public System.Guid VisitingID { get; set; } 
    public string Employee { get; set; } 
    public string CustomerName { get; set; } 
    public Nullable<System.DateTime> VisitingDate { get; set; } 
    public string StartTime { get; set; } 
    public string EndTime { get; set; } 
    public string SpendTime { get; set; } 
    public string POVisit { get; set; } 

私は5つのフィールドを作成したいです表示投稿日土曜日のCustomerNamePovisitのStartTime終了時間従業員。しかし、これらのフィールドはすべて、異なるモデルのプロパティです。同じビューで2つの異なるモデルプロパティにアクセスできますか?私は私のレベルで最高の私の問題を説明しようとしました。誰か私に解決策を教えてください。

アドバンスのおかげ..

+0

ビューには1つのViewModelのみが必要です。 – Ben

+0

mwilczynski私はテキストボックスとして残しておきたいと思っています。残りのフィールドは、以下のイメージで言及しているのと同じようにDbからフェッチしたデータを表示する必要があります。[Eg Op] [3] [3] /i.stack.imgur.com/YqhGm.jpgので、私は別のモデルからプロパティにアクセスする必要があります。 – Susan

+0

次に、DBからの異なるモデルのプロパティを組み合わせた新しい 'ViewModel'を作成します。どうしたの? 'ViewModel'はビューのデータを表現するためのヘルパーです。 – mwilczynski

答えて

0

mwilczynskiで述べたように、ビューには1つのビューモデルしかありません。モデルであるアイデアには、ビューがページをレンダリングするために必要なデータが含まれています。理想的には、それ以上は何もありません。

グリッドをレンダリングするために、データアイテムのコレクションを持つビューモデル(訪問日...次の予定)が必要なように見えます。 これが可能である:

VisitViewModelがグリッドに表示するためにデータベースから取得したデータが含まれているのviewmodelある
public class VisitorsViewModel 
{ 
    public DateTime FromDate { get; set; } 
    public DateTime ToDate { get; set; } 

    public ICollection<VisitViewModel> Visits { get; set; } 
} 

public class VisitViewModel 
{ 
    public string CustomerName { get; set; } 
    public string PoVisit { get; set; } 
    public string StartTime { get; set; } 
    public string EndTime { get; set; } 
    public string Employee { get; set; } 
} 

コントローラは次のようになります。

public ActionResult displaycustomer() 
{ 
    // Get data from database 
    List<View_VisitorsForm> objvisitlist = (from v in db.View_VisitorsForm select v).ToList(); 

    // Create a new viewmodel and fill it with the data you want displayed 
    VisitorsViewModel viewmodel = new VisitorsViewModel 
    { 
     FromDate = DateTime.Now.AddDays(-7), //(some default value) 
     ToDate = DateTime.Now,    //(some default value) 
     Visits = new List<VisitViewModel>() 
    }; 

    foreach (View_VisitorsForm visit in objvisitlist) 
    { 
     viewmodel.Visits.Add(new VisitViewModel 
     { 
      CustomerName = visit.CustomerName, 
      PoVisit = visit.POVisit, 
      StartTime = visit.StartTime, 
      EndTime = visit.EndTime, 
      Employee = visit.Employee 
     } 
    } 

    // return a ViewResult with the viewmodel 
    return View(viewmodel); 
} 

ビューでは、ICollection<VisitViewModel>のプロパティにアクセスできます(訪問日をテーブルに入れたいと思っています):

<table> 
@foreach (var visit in Model.Visits) 
{ 
    <tr> 
     <td> 
      @Html.DisplayValueFor(m => visit.CustomerName) 
     </td> 
     <td> 
      @Html.DisplayValueFor(m => visit.PoVisit) 
     </td> 
    </tr> 
} 
</table> 
+0

Arnoudこれは私のコントローラコードです。public ActionResult displaycustomer(){List objvisitlist =(vからdb.View_VisitorsFormを選択するv).ToList();私はあなたの答えで言及した通り、別のモデルの1つのモデルを呼び出し、私はあなたが言ったようにすべてのことをやったが、私はエラーが発生しました。私はそのリストコード(List )を書いたので、objvisitlist(コントローラオブジェクト)やVisits(モデルオブジェクト)のビューオブジェクトを呼ぶ必要があるのか​​疑問に思っています。この疑問を明確にしてください – Susan

+0

コントローラでデータが取得されていますが、使用されていない/ビューに返されていないことを確認します。モデルが作成されると、Viewメソッドのパラメータとしてビューに渡されなければなりません:return View(viewmodel);ああ、私はエンティティをviewmodelsに入れません。あなたのコメントから、View_VisitorsFormはviewmodelではないことを理解しています以前は思っていましたが、(データベース)エンティティです。私は答えを明確にするために更新しようとします。 –

0

あなただけのような新しいViewModelに、作成する必要があります。

public class CombinedVisitorsFormViewModel 
{ 
    public DateTime FromDate { get; set; } 
    public DateTime ToDate { get; set; } 
    public string Employee { get; set; } 
    public string CustomerName { get; set; } 
    public string StartTime { get; set; } 
    public string EndTime { get; set; } 
    public string POVisit { get; set; } 
} 

、ワイヤ(またはマップ、もしくはしかし、あなたはそれを呼びたい)あなたControllerのすべてのプロパティを、現在のViewModelsで行うのと同じ方法です。 ViewModelは、特定のビュー/ビューのデータ表現であるため、他のモデルのデータ、またはDB Modelとは直接関係のないデータも組み合わせることができます。

関連する問題