我将匿名类型的结果放入一些视图数据中:
var projectData = from p in db.Projects
orderby p.title
select new
{
Title = p.title,
DevURL = p.devURL ?? "N/A",
QAURL = p.qaURL ?? "N/A",
LiveURL = p.liveURL ?? "N/A",
Users = p.GetUsers().MakeUserList()
};
ViewData["ProjectSummary"] = projectData;
我如何在前端的MVC视图中迭代这个视图数据,制作一个结果表?
在您的情况下,创建一个模型来保存数据比使用匿名类型要简单得多。
您遇到的问题是,当您的匿名类型存储在 ViewData 中时,该类型会被强制转换为对象。在 UI 方面,当您取出该对象时,访问其属性的唯一方法是使用反射。您不想在用户界面中执行此操作。这将是非常难看的。相反,只需将以下类添加到您的模型中:
public class Project{
public string Title {get;set;}
public string DevUrl {get;set;}
public string QAUrl {get;set;}
public string LiveUrl {get;set;}
public IEnumerable<User> Users {get;set;}
public static IEnumerable<Project> RetrieveAllProjects()
{
return from p in db.Projects
orderby p.title
select new Project
{
Title = p.title,
DevURL = p.devURL ?? "N/A",
QAURL = p.qaURL ?? "N/A",
LiveURL = p.liveURL ?? "N/A",
Users = p.GetUsers().MakeUserList()
};
}
在你的控制器中执行以下操作:
public ActionResult Index()
{
return View("Index", Project.RetrieveAllProjects());
}
并在您视图的代码隐藏中,强类型如下:
//snip
public partial class Index : ViewPage<IEnumerable<Project>>
{
//snip
您可能会认为放置所有这些模型有点浪费,但如果您明智地使用模型,它会更容易理解,并且会使您的 UI 代码更加简洁。
此外,模型是放置加载数据和构建模型本身的逻辑的好地方(事实上,应该是您执行此操作的地方)。想想 ActiveRecord。而且,当您对所有这些进行编码时,请意识到像 SubSonic 这样的项目可以为您创建模型,没有任何混乱或大惊小怪。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)