あなたが現在次のようなことをしていると仮定します:
public ActionResult GetBlogs()
{
var someService = new FooService();
var blogs = someService.GetMeMyBlogs();
return View("bloglist", blogs);
}
ビューモデルを使用するには、サービスからモデルを返すか、ビューに送信する前にコントローラーでオブジェクトを変換する必要があります。
Blog
1つのオプションは、オブジェクトの拡張メソッドを作成することです。
次のようなプロパティがいくつかあるとします。
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を使用する場合は、受け入れる情報を制御できます。
ビューを構築する方が簡単/迅速だと思います