1

申し訳ありませんが、viewModelを使用してこれを行う方法があると確信していますが、これについては非常に経験が浅く、正しく行っているかどうかさえわかりません。

私がやろうとしているのは、複数のブログと、各ブログをビューに投稿したユーザーのプロファイル情報を渡すことです。

次のエラーが発生します。

ディクショナリに渡されるモデルアイテムのタイプは「ACapture.Models.ViewModels.BlogViewModel」ですが、このディクショナリにはタイプ「System.Collections.Generic.IEnumerable`1[ACapture.Models.ViewModels.BlogViewModel]」のモデルアイテムが必要です。

次のクエリ結果をビューに渡そうとしています。

        var results = (from r in db.Blog.AsEnumerable()
                       join a in db.Profile on r.AccountID equals a.AccountID
                       select new { r, a });

        return View(new BlogViewModel(results.ToList()));
    }

これは私のviewModelです

public class BlogViewModel
{
    private object p;

    public BlogViewModel(object p)
    {
        this.p = p;
    }
}

そして私の見解

@model IEnumerable<ACapture.Models.ViewModels.BlogViewModel>
@{
    ViewBag.Title = "Home Page";
}

<div class="Forum">
    <p>The Forum</p>

            @foreach (var item in Model)
            {
                <div class="ForumChild">


                    <img src="@item.image.img_path" alt="Not Found" />
                    <br />
                        <table>
                            @foreach (var comment in item.comment)
                            {

                                <tr><td></td><td>@comment.Commentation</td></tr>
                            }
                        </table>
                </div>                
            }
</div>

前もって感謝します。

4

2 に答える 2

2

ビューモデルを次のように少し変更する必要があると思います。

public class BlogViewModel
{
    public Blog Blog { get; set; }
    public Profile Profile{ get; set; }
}

次に、次のように返します。

    var results = (from r in db.Blog.AsEnumerable()
                   join a in db.Profile on r.AccountID equals a.AccountID
                   select new new BlogViewModel { Blog = r, Profile = a });

    return View(results.ToList());

次に、foreachビュー内のループで、プロファイルとブログ情報の両方を含むオブジェクトを取得するので、feのように使用できます。@item.Profile.Username

于 2012-08-02T17:39:08.207 に答える
0

この場合、ViewModelで何を達成しようとしているのか完全にはわかりませんが、ページがコメントのコレクションを含む単一のブログを表すことを期待しているようです。この場合、交換する必要があります

IEnumerable<ACapture.Models.ViewModels.BlogViewModel>

ACapture.Models.ViewModels.BlogViewModel

次にModel、単一のBlogViewModelを表します。これは、を使用してコメントを反復処理し、を使用しModel.commentsて画像にアクセスできますModel.image.img_path

これが当てはまらず、ページごとに複数のBlogViewModelを使用する場合は、実際にBlogViewModelのコレクションを作成し、代わりにそれをビューに渡す必要があります。

于 2012-08-02T17:53:03.127 に答える