我对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();
}
答案 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>
尝试一次,它应该有用。