2011-09-11 5 views
0

特定のモデルを扱う部分的なビューがあります。 そのモデルに関する参照がないビューから、部分ビューにどのように渡すことができますか?強く型付けされた部分図にモデルを渡す方法

私の部分図があります:あなたがモデルにあなたの視野には何の言及もしていないと仮定すると

@Html.Partial("CommentForm", Model.NewsComments.SingleOrDefault()) //does not work 
+0

何らかのエラー(もしあれば)がありますか? – scartag

+0

このエラーは次のようになります。 "辞書に渡されたモデルアイテムは 'MyNS.Models.News'タイプですが、この辞書には 'MyNS.Models.NewsComment'タイプのモデルアイテムが必要です。私はNewsモデルから呼び出しますが、私は部分ビューからNewsCommentアイテムを挿入する必要があります – Cris

+0

「NewsComments」プロパティは「NewsComment」ではなく「News」としてタイプされているようです。これをチェックしたり、メインビュー(NewCommentsプロパティを持つクラス)でモデルのコードを投稿できますか? –

答えて

0

、あなたは1を次の操作を行うことができます:私はから呼び出すことができますどのよう

@model MyNS.Models.NewsComment 

@{ 
     var repo = new Models.MyRepo(); 
     var partialModel = repo.GetAll(); 
    } 

    @Html.Partial("CommentForm", partialModel) 

これはASP.NET MVCのSeperation of Concerns理論に完全に反するものです。

私は、モデルビュー(イベント内で使用しない場合はイベント)をビューに渡し、ビューからパーシャルに渡すことです。そうすれば、コントローラからのデータアクセスがより良いアプローチになります。

UPDATE

私はちょうどあなたがエラーに関するコメントを見てきました。より良いアプローチを次のようにあなたがどうなるのか、このケースでは(私は上記示された最初のケ​​ースでも、このために動作します)です。

次のようにViewModelにを作成します。その後、

public class MyViewModel { 

    public MyNS.Models.News News {get; set;} 
    public MyNS.Models.NewsComment NewsComment {get; set;} 

} 

そして、それを渡すをあなたのビューは次のように次のよう

var viewModel = new MyViewModel(); 
viewModel.News = repo.GetNews(); 
viewModel.NewsComment = repo.GetNewsComment(); 

retun View(viewModel); 

は、あなたのビュー上で作業:

@Html.Partial("CommentForm", Model.NewsComment) 
+0

あなたのコードでは、ニュースはnewscommentとは全く関係のない別個のエンティティであると仮定しています。彼のコードから、NewsCommentがNewsのナビゲーションプロパティであることがわかりやすくなりました(おそらくdb関係が存在する可能性があります) – scartag

+0

彼は完全に間違ったモデルを渡しています。彼の部分は 'MyNS.Models.NewsComment'にタイプされますが、彼は' MyNS.Models.News'のモデルタイプを渡しています。 – tugberk

0

このエラーに応じて、モデルのNewsCommentsプロパティのタイプはIEnumerable<News>ですが、IEnumerable<NewsComment>である必要があります。LINQクエリを使用して、モデルのNewsCommentsプロパティに誤ったselectステートメントを設定している可能性があります。