2013-03-08 3 views
0

뷰 모델을 이해하고 구현하는 데 문제가 있습니다. 예를 들어, 각 Blog 객체가 하나의 블로그 게시물을 나타내는 Blog 객체가 있다고 가정 해 보겠습니다. 각 블로그 (제목, 텍스트, 게시 된 날짜 등)의 목록이 포함 된보기가 있습니다. 현재 블로그 개체 목록을보기에 전달하고 있지만 BlogViewModel 개체 목록을보기에 전달합니다. 어떻게해야합니까? View Models를 이해하는 데 도움이되는 훌륭한 자료가 있습니까?데이터베이스가있는 모델보기

편집 전달하려는 BlogViewModel에는 블로그의 제목과 텍스트에 대한 약자 필드가 포함됩니다. 예를 들어 제목의 처음 10 자와 텍스트의 처음 25 자만 표시하려고합니다.

+0

고급 정보/고급 편집 기능을 표시 할 경우 뷰 모델이 적절한에 대한 빠르고/쉽게 찾을 수 있습니다. 객체의 기본 속성 만 표시하려는 경우 객체 목록을 전달할 때 아무 문제가 없습니다. 왜 뷰 모델 목록을 전달하겠습니까? – Kev

+2

보기 모델은 실제로 _view_의 모델이므로 BlogViewModel 개체 목록을보기로 전달하는 이유는 무엇입니까? 왜 블로그 객체 목록으로 구성된 단일 뷰 모델을 가지지 않습니까? –

+0

내가 왜 뷰 모델을 원하는지 이해하는 데 도움이되는 게시물을 편집했습니다. 또한 주 모델에서 작업하지 말고 주 모델의 뷰 모델 또는 복사본에서 작업하도록 지시 받았습니다. – tentmaking

답변

2

현재 같은 일을 가정 :

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을 사용하는 경우 수락 할 정보를 제어 할 수 있습니다.

  • 나는 구축 전망