2017-04-05 43 views
2

這不是一個新主題,但是即使通讀了其中的很多內容,我仍然不完全瞭解如何在我的案例中實現它們。尋找你的建議。ViewModel MVC 5使用2個類創建,使用它的控制器

我有兩個類。

public class Media 
    { 
     public int Id { get; set; } 
     public string title { get; set; } 
     public string description { get; set; } 
     public string body { get; set; } 
     public string ImagePath { get; set; } 
    } 

public class Video 
    { 
     public int ID { get; set; } 
     public string Title { get; set; } 
     public string Description { get; set; } 
     public string VideoLink { get; set; } 
     public string tags { get; set; } 
    } 

目前我有兩個控制器,爲他們每個人MediasControllerVideosController的,他們每個人MediaMain觀點和看法VideoMain工作。結果我可以在兩個單獨的視圖上顯示兩個對象。我們正在談論某種媒體博客網站,新聞可能會有所不同,它們可能只是文字,文字+圖片或文字+視頻。每個新的「媒體」應該填充在一個視圖中。

如果我們在高層次上討論,我認爲我應該創建一個新的viewModel類來收集我需要在viewmodel頁面上顯示的那些字段,對嗎?這裏是我有什麼:

public class MediaViewModel 
    { 
     public class Media 
     { 
       public string title { get; set; } 
       public string description { get; set; } 
       public string body { get; set; } 
       public string ImagePath { get; set; } 
     } 
     public class Video 
     { 
      public string Title { get; set; } 
      public string Description { get; set; } 
      public string VideoLink { get; set; } 
     } 
} 

現在,如果這是正確的,我應該有一個ViewModelController由這個類,對吧?或者,也許我需要兩個類的集合? 我的意思是這樣的:

public class MediaViewModel 
     { 
      public class Media 
      { 
        public string title { get; set; } 
        public string description { get; set; } 
        public string body { get; set; } 
        public string ImagePath { get; set; } 

        **public Video Video{ get; set; }** 
      } 
    } 

請幫助。

+0

構圖類具有屬性'public class MediaViewModel {public Media Media {get;組; } public Video Video {get;組; }}。當你開始談論藏品時,你需要考慮每件商品與其他藏品的關係。 – Jasen

+0

您通常沒有ViewModel控制器。但是,您可以創建一個「媒體」控制器。視圖模型僅僅是一個容納數據的容器。下面的麻雀的答案是正確的。 – joshmcode

+0

謝謝你們!是的,這使得事情一點點賭注更清晰 –

回答

4

你是在正確的軌道上,除了你的類定義應該是這樣的:

public class MediaViewModel 
{ 
    public Media media { get; set; } 
    public Video video { get; set; } 
} 
+0

謝謝!這清除了我的想法 –

0

你應該建立這個。這是最佳做法;

public MediaViewModel() 
    { 
     Foo = new List<Media>(); 
     FooVideo = new List<Video>(); 
    } 
    public IList<Media> Foo { get; set; } 
    public IList<Video> FooVideo { get; set; } 

你也可以在你與你可以使用類似這樣的例子剃刀引擎查看您的控制器

public ActionResult About() 
    { 
     ViewBag.Message = "Your application description page."; 

     var model = new MediaViewModel(); 
     model.Foo.Add(new Models.Media 
     { 
      body = "test body", 
      description = "description", 
      ImagePath = "../path/path", 
      title = "this title" 
     }); 
     return View(model);    
    } 

這樣使用。

@model TestMVC.ViewModels.MediaViewModel 

@foreach (var item in Model.Foo) 
{ 
    <p>@item.title</p> 
    <p>@item.ImagePath</p> 
    <p>@item.body</p> 
    <p>@item.description</p>  
} 

最後你會得到這樣的東西。 Viewmodel print

+0

是的,這正是我所期待的,非常感謝你,我要儘快測試它! –

+0

祝你好運。請在測試後分享您的測試結果。 –

+0

1.當我創建這個新的「媒體」,我需要有一個新的創建,更新,基於ViewModel刪除vews或我創建那些使用標準EF創建視圖單獨的 ? 2.您顯示訪問參數Model.FooVideo.Description的這種方式,但我認爲我需要使用循環來查看對象的所需參數嗎? 也許我需要這樣的事情:@foreach(ViewBag.video中的var視頻){}? –

相關問題