当前位置:  开发笔记 > 编程语言 > 正文

在MVC视图中迭代匿名类型数据

如何解决《在MVC视图中迭代匿名类型数据》经验,为你挑选了1个好方法。

进入一些视图数据我已经把一个匿名类型的结果:

            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视图中迭代这个视图数据来说,制作一个结果表?



1> 小智..:

在您的情况下,创建一个模型来保存数据而不是使用匿名类型会简单得多.

您遇到的问题是,当您的匿名类型存储在ViewData中时,它会被强制转换为对象.在UI方面,当您获取该对象时,访问其属性的唯一方法是使用反射.您不希望在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 Users {get;set;}

public static IEnumerable 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>
{
//snip

你可能认为让所有这些模型都存在一些浪费,但它更容易理解,并且如果你明智地使用你的模型,你的UI代码会变得更加苗条.

此外,模型是一个很棒的地方(事实上,应该是你应该去的地方)来放置加载数据和构建模型的逻辑.想想ActiveRecord.而且,当你对所有这些进行编码时,要意识到像SubSonic这样的项目会为你创建你的模型,而不会有任何麻烦或麻烦.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有