현재 같은 일을 가정 :
public ActionResult GetBlogs()
{
var someService = new FooService();
var blogs = someService.GetMeMyBlogs();
return View("bloglist", blogs);
}
당신이 당신의 서비스에서 그들을 돌아가거나보기로에 전송하기 전에 컨트롤러의 개체를 변환하거나 필요로보기 모델을 사용하기를.
하나의 옵션은 Blog
개체에 대한 확장 방법을 만드는 것입니다.
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()));
}
같은 : 우리는 확장 방법을 쓸 수
public class BlogVM
{
public string Title {get;set;}
public string Body {get;set;}
public string AuthorName {get;set;}
public int Id {get;set;}
}
:
우리가 같은 몇 가지 속성의 뭔가를 말 보기에
BlogVM
개체 목록이 전달됩니다.
편집 : 아마도 에 약간의 단어를 추가 할 가치가 있습니다. ViewModels.
왜 필요없는 경우 모든 것을 보냅니 까? 귀하의 예제에서 당신의 몸은 큰 텍스트 블록 일 것입니다. 25자를 표시하는 경우에만 25자를 보내십시오.
일부 정보는 민감 할 수 있습니다. Author
의 이름을 보내고 싶지만, 이름, 이메일 또는 암호 또는 주소와 같이 보유 할 수있는 정보는 없습니다.
마찬가지로 POST 시나리오에서 잠재적으로 어떤 정보가 다시 전송 될지 제어 할 수 있습니다. 사용자가 전체 개체로 다시 POST 할 수 있도록 허용하면 사용자가 예상치 못한 업데이트 된 필드를 다시 보낼 수 있습니다. VM을 사용하는 경우 수락 할 정보를 제어 할 수 있습니다.
나는 구축 전망
고급 정보/고급 편집 기능을 표시 할 경우 뷰 모델이 적절한에 대한 빠르고/쉽게 찾을 수 있습니다. 객체의 기본 속성 만 표시하려는 경우 객체 목록을 전달할 때 아무 문제가 없습니다. 왜 뷰 모델 목록을 전달하겠습니까? – Kev
보기 모델은 실제로 _view_의 모델이므로 BlogViewModel 개체 목록을보기로 전달하는 이유는 무엇입니까? 왜 블로그 객체 목록으로 구성된 단일 뷰 모델을 가지지 않습니까? –
내가 왜 뷰 모델을 원하는지 이해하는 데 도움이되는 게시물을 편집했습니다. 또한 주 모델에서 작업하지 말고 주 모델의 뷰 모델 또는 복사본에서 작업하도록 지시 받았습니다. – tentmaking