显示多个部分视图错误

时间:2014-08-20 12:27:04

标签: asp.net-mvc asp.net-mvc-4 razor partial-views asp.net-mvc-partialview

我是MVC及其部分视图的新手,我创建了一个Viewmodel类:

 public class CategoryBlogPost
{
    public IEnumerable<Category> Category { get; set; }
    public IEnumerable<Blogpost> Blogpost { get; set; }
}

在我的控制器中我创建了这个:

 public ActionResult Index()
        {
            CategoryBlogpost model = new CategoryBlogpost
            {
                Blogpost = new List<Blogpost>(),
                Category = new List<Category>()
            };
            return View(model);
        }

我做了两个部分观点; _BlogpostPartial和_CategoryPartial:

_BlogpostPartial:

@model IEnumerable<Project.Models.Blogpost>

   @foreach (var item in Model)
    {
              <h3> @Html.DisplayFor(modelItem => item.Subject)</h3>
              <p>  @Html.DisplayFor(modelItem => item.Detail)</p>
    }

_CategoryPartial:

@model IEnumerable<Project.Models.Category>

<form>
    @foreach (var item in Model)
    {
        @Html.ActionLink(item.Name, "GetBlogpostsByCat", new { id = @Html.DisplayFor(modelItem => item.ID) })
    }
</form>

这是我打电话给他的页面:

@model Project.Models.CategoryBlogpost

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
@Html.Partial("_BlogpostPartial", Model.Blogpost)


@Html.Partial("_CategoryPartial", Model.Category)

这将返回包含我的两个视图的页面,但不包含foreach语句的任何输出 这是因为我从未使用过我的getAllBlogposts(),我已经制作了这个方法,但我不知道现在放在哪里。通常我只是这样说:

public ActionResult Index()
{
    return View(BlogpostRepository.getAllBlogposts);
}

但正如您所见,此方法现在无法实现

2 个答案:

答案 0 :(得分:0)

纠正你的

@model IEnumerable<Project.Models.Blogpost>

as

@model Project.Models.Blogpost

@model IEnumerable<Project.Models.Category>

作为

@model Project.Models.Category

答案 1 :(得分:0)

由于您希望显示BlogpostCategory的集合,因此您的视图模型应为

public class CategoryBlogPost
{
  public IEnumerable<Blogpost> Blogposts { get; set; }
  public IEnumerable<Category> Categories { get; set; }
}

然后在你索引方法

public ActionResult Index()
{
  CategoryBlogpost model = new CategoryBlogpost();
  // Populate collections
  model.Blogposts = BPRepository.getAllBlogposts();
  model.Categories = ....

  return View(model);
}

注意我使用了多个属性名称,因此这可能会影响您的视图