剃刀。如何使用IQueryable部分视图?

时间:2014-11-03 01:50:11

标签: c# asp.net-mvc asp.net-mvc-4 razor

我对Razor引擎完全不熟悉,所以我的问题可能看起来很傻。无论如何。我需要在主视图中使用局部视图,并且我传递了继承IQueryable接口的模型。 看起来像这样:

 @{Html.RenderPartial("~/Views/comments/Details.cshtml", new IQueryable<BlogAspNetMVC.Models.comments>);}

部分视图模型:

@model IQueryable<BlogAspNetMVC.Models.comments>

我应该如何更改RenderPartial以接受此模型作为参数?

P.S。 这是评论模型:

  public partial class comments
    {
        public int ID { get; set; }
        public string Comment { get; set; }
        public Nullable<int> Author { get; set; }
        public Nullable<System.DateTime> Posted { get; set; }
        public Nullable<int> PostID { get; set; }

        public virtual blog_post blog_post { get; set; }
    }

这是Icomments界面:

public interface IComments : IDisposable
{
    IQueryable<comments> GetPostComments(int postid);
    //void Add(comments comment);
    //void Update(comments comment);
    //void Remove(int id);
}

这是如何在存储库中实现的:

public IQueryable<comments> GetPostComments(int postid)
        {
            var all = from a in db.comments
                      orderby a.Posted descending
                      where a.PostID == postid
                      select a;
            return all.AsQueryable();
        }

2 个答案:

答案 0 :(得分:1)

根据您发布的内容,这应该传递正确的类型:

@Html.RenderPartial("~/Views/comments/Details.cshtml", 
                  new List<BlogAspNetMVC.Models.comments>().AsQueryable());

虽然,你只是传递一个空集合。我怀疑你从父视图中遗漏了一些你应该真正传递给RenderPartial的模型数据。

答案 1 :(得分:1)

这是我尝试过的,它对我有用。

Controller应将IQueriable对象传递给视图

IQueryable<comments> commentsList = commentsRepository.GetPostComments(1);
        return View(commentsList);

在父视图中(呈现局部视图)应使用@model指令作为

@model IQueryable<WebApplication1.Models.comments>

我在局部视图中将@model指令修改为

@model IQueryable<WebApplication1.Models.comments>

尝试一次,它应该有用。