0

これは非常に簡単に行う必要がありますが、多くの例が見つかりません。すべての投稿を対応するタグで取得し、ビューに表示したいと考えています。基本的にシンプルなブログタイプのもの。モデル、ビューモデル、コントローラー、およびビューを使用したコードを次に示します。タグを除いてすべてが機能するため、構文に明らかに問題があります。

public class MeWallPost
{
    public virtual int MeWallPostId { get; set; }

    public virtual string PostTitle { get; set; }        
    public virtual string PostContent { get; set; 
    public virtual DateTime PublishDate { get; set; }

    public virtual ICollection<MeWallPostMeTag> MeWallPostMeTags { get; set; }
}

public class MeTag
{
    public virtual int MeTagId { get; set; }

    public virtual string Name { get; set; }

    public virtual ICollection<MeWallPostMeTag> MeWallPostMeTags { get; set; }
}

public class MeWallPostMeTag
{
    [Key, Column(Order = 0)]
    public virtual int MeWallPostId { get; set; }
    [Key, Column(Order = 0)]
    public virtual int MeTagId { get; set; }

    public virtual MeWallPost MeWallPost { get; set; }
    public virtual MeTag MeTag { get; set; }
}

----

public class MeWallPostViewModel
{
    public string PostTitle { get; set; }
    public string PostContent { get; set; }
    public DateTime PublishDate { get; set; }

    private IEnumerable<MeTag> _Tags = new List<MeTag>();
    public IEnumerable<MeTag> Tags
    {
        get { return _Tags; }
        set { _Tags = value; }
    }

    public IEnumerable<MeWallPostViewModel> GetPosts()
    {
        var db = new DatselleDB();

        return from post in db.MeWallPosts             
               select new MeWallPostViewModel
               {
                   PostTitle = post.PostTitle,
                   PostContent = post.PostContent,
                   PublishDate = post.PublishDate,
                   Tags = post.MeWallPostMeTags.Select(a => a.MeTag)
               };
    }
}

-----

public ViewResult Index()
{
   return View(new MeWallPostViewModel());
}

------

@foreach (var item in Model.GetPosts()) {
<div class="postItem clear">
    <h3>@Html.DisplayFor(modelitem => item.PostTitle)</h3>
    <span class="date">@Html.DisplayFor(modelitem => item.PublishDate)</span>
    <p>@Html.DisplayFor(modelItem => item.PostContent)</p> 
    @foreach (var tag in Model.Tags) {
        @Html.DisplayFor(modelItem => tag.Name.ToString())
    }
</div> 
}
4

2 に答える 2

0

編集:申し訳ありません。

あなたのコードは少し奇妙です。

  • ビューモデルにdbを入れないでください
  • あなたの GetPosts メソッドはそのままでは意味がありません (クラスとそのプロパティとは関係ありません...なぜですか?)

私は少なくともそうします(良いとは言えませんが、すでに良くなっています)

GetPosts() メソッドをコントローラーにプライベートとして配置します (これは最善の方法ではありませんが、より良い方法です)。

あなたのデータベースが Disposable を実装していることを願っています。

それから

public ViewResult Index() {
   return View(GetPosts())
}

ビュー インデックスには @model IEnumerable が必要です

そしてあなたの見解では

@foreach (var post in Model) {
 bla bla
}

EDIT 2: ところで、クエリをデバッグして、何かが返されるかどうかを確認してください

于 2012-04-12T16:04:57.737 に答える