簡體   English   中英

使用數據庫查看模型

[英]View Models with database

我無法理解和實現視圖模型。 例如,假設我有一個Blog對象,其中每個Blog對象代表一個博客帖子。 我有一個視圖,其中包含每個博客的列表(標題,文本,發布日期等)。 目前我正在向視圖傳遞一個博客對象列表,但我寧願將一個BlogViewModel對象列表傳遞給視圖。 我該怎么做? 有沒有人有任何好的資源可以幫助我理解View Models?

編輯我要傳遞的BlogViewModel將包含博客標題和文本的縮寫字段。 例如,我只想顯示標題的前10個字符和文本的前25個字符。

假設您目前正在做類似的事情:

public ActionResult GetBlogs()
{
    var someService = new FooService();
    var blogs = someService.GetMeMyBlogs();
    return View("bloglist", blogs); 
}

要使用視圖模型,您需要從服務中返回它們,或者在將它們發送到視圖之前轉換控制器中的對象。

一種選擇是為Blog對象創建擴展方法。

假設我們有一些屬性:

public class BlogVM
{
    public string Title {get;set;}
    public string Body {get;set;}
    public string AuthorName {get;set;}
    public int Id {get;set;}
}

我們可以寫一個擴展方法:

public static BlogVM ToBlogVM(this Blog source)
{
    return new BlogVM 
    {
         Title = source.Title.SubString(0, 10),
         Body = source.Body.SubString(0, 25),
         AuthorName = source.Author.Name,//assuming you have some kind of Author table, I'm sure you get the idea..
         Id = source.Id
    };
}

現在在你的控制器中你可以做類似的事情

public ActionResult GetBlogs()
{
    var someService = new FooService();
    var blogs = someService.GetMeMyBlogs();
    return View("bloglist", blogs.Select(x => x.ToBlogVM())); 
}

BlogVM對象列表傳遞給您的視圖。

編輯:可能是值得的,為什么的ViewModels添加了幾句話。

  • 如果它不需要它,為什么發送視圖? 在您的示例中,您的身體可能是一大塊文本。 如果你只顯示25個字符,只發送25個字符

  • 對象中的一些信息可能是敏感的。 您可能想要發送Author的姓名,但肯定不會發送您可能持有的其他信息,例如他的姓名,電子郵件甚至密碼或地址。

  • 同樣,在POST場景中,您可以控制可能會將哪些信息發回給您。 如果您允許用戶POST回到完整對象,他們可能會向您發回您可能不期望的更新字段。 如果使用VM,則可以控制接受哪些信息。

  • 我發現構建視圖更容易/更快

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM