[英]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.