asp.net-mvc – 如何在一个视图中使用两个IENumerable模型
|
我试图在一个视图中使用两个模型,但据我所知,我的程序只是在模型中看不到任何对象. 这是我的代码. 楷模: public class Album
{
[Key]
public int ThreadId { get; set; }
public int GenreId { get; set; }
public string Title { get; set; }
public string ThreadByUser { get; set; }
public string ThreadCreationDate { get; set; }
public string ThreadContent { get; set; }
public Genre Genre { get; set; }
public List<Posts> Posty { get; set; }
}
public class Posts
{
[Key]
public int PostId { get; set; }
public int ThreadId { get; set; }
public string PostTitle { get; set; }
public string PostContent { get; set; }
public string PostDate { get; set; }
public string PosterName { get; set; }
public Album Album { get; set; }
}
public class ModelMix
{
public IEnumerable<Posts> PostsObject { get; set; }
public IEnumerable<Album> ThreadsObject { get; set; }
}
索引控制器代码: public ActionResult Index(int id)
{
ViewBag.ThreadId = id;
var posts = db.Posts.Include(p => p.Album).ToList();
var albums = db.Albums.Include(a => a.Genre).ToList();
var mixmodel = new ModelMix
{
PostsObject = posts,ThreadsObject = albums
};
return View(mixmodel);
}
查看代码: @model MvcMusicStore.Models.ModelMix <h2>Index</h2> @Html.DisplayNameFor(model => model.PostsObject.PostContent) 当我尝试执行我的程序时,我收到此错误:
我怎样才能让它按预期工作?在互联网上有很多像我这样的问题,但我找不到任何匹配我的情况. 解决方法在MVC中循环模型可能有点令人困惑,只是因为模板化帮助程序(即Html.DisplayFor和Html.EditorFor)可以提供模板,帮助程序将自动为集合中的每个元素调用这些模板.这意味着如果你是MVC的新手,并且你没有意识到DisplayTemplate或者还没有为该集合提供EditorTemplate,那么它看起来就像一个简单的:@Html.DisplayFor(m => m.SomePropertyThatHoldsACollection) 是你所需要的全部.因此,如果您已经看过类似的东西,这可能就是您做出假设的原因.但是,我们暂时假设还没有提供模板.你有两个选择. 首先,最简单的说,就是在集合中使用foreach: @foreach (var post in Model.PostsObject)
{
@Html.DisplayFor(m => post.PostTitle)
// display other properties
}
你也可以使用for循环,但是使用IEnumerable< T>,没有索引器,所以这不起作用: @for (int i = 0; i < Model.PostsObject.Count(); i++)
{
// This generates a compile-time error because
// the index post[i] does not exist.
// This syntax would work for a List<T> though.
@Html.DisplayFor(m => post[i].PostTitle)
// display other properties
}
如果你确实想要使用for循环,你可以像这样使用它: @for (int i = 0; i < Model.PostsObject.Count(); i++)
{
// This works correctly
@Html.DisplayFor(m => post.ElementAt(i).PostTitle)
// display other properties
}
因此,请使用您喜欢的任何一种.但是,在某些时候,考虑提供templates for your types是个好主意.(注意:尽管本文是为MVC 2编写的,但建议仍然适用.)它们允许您从视图中删除循环逻辑,使它们更清晰.当与Html.DisplayFor或Html.EditorFor结合使用时,它们还将为模型绑定生成正确的元素命名(这很棒).它们还允许您重用类型的演示文稿. 我要做的最后一个评论是你的属性的命名有点冗长: public class ModelMix
{
public IEnumerable<Posts> PostsObject { get; set; }
public IEnumerable<Album> ThreadsObject { get; set; }
}
我们已经知道它们是对象,所以最后不需要添加它.这更具可读性: public class ModelMix
{
public IEnumerable<Posts> Posts { get; set; }
public IEnumerable<Album> Threads { get; set; }
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 从ASP MVC 3 Preview 1升级到beta时的并发症
- asp.net – 评论.aspx
- asp.net字符串分割函数使用方法分享
- asp.net-mvc-3 – ASP.NET MVC – 不同角色的菜单
- asp-classic – 找出真正的文件类型
- asp.net-mvc – 有没有办法让RoutePrefix以可选参数开头?
- asp.net-web-api – 有没有办法在ASP.Net Web API中别名响应
- asp.net core标签助手的高级用法TagHelper+Form
- .net – 设置页面标题不起作用
- asp.net-mvc – Asp.net Mvc自定义机制来处理未经授权的请求
- asp.net-mvc – 如何在razor中添加角度标签到htm
- Application_Start不被ASP.NET网页应用程序打中
- asp.net-mvc-4 – ASP.NET MVC:脚本捆绑何时决定
- asp.net-core – project.json中的框架和导入部分
- asp.net – 在MVC 4.0中使用部分视图中的节
- asp.net中强类型的会话
- asp.net-mvc-3 – Asp.net Mvc3 webgrid和分页
- asp.net-ajax – 如何在ASP.NET AJAX中实现文件下
- asp.net-core – 如何注入对特定IHostedService实
- .net – TagBuilder从MVC 3 beta版转到RC
