c# - 在 MVC View 中迭代匿名类型数据

标签 c# asp.net-mvc anonymous-types

我将匿名类型的结果放入一些 View 数据中:

            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 View 中迭代此 View 数据并制作结果表?

最佳答案

在您的情况下,创建一个模型来保存数据比使用匿名类型要简单得多。

您遇到的问题是,当您的匿名类型存储在 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()
             };
}

在你的 Controller 中执行以下操作:

public ActionResult Index()
{
  return View("Index", Project.RetrieveAllProjects());
}

并在 View 的代码隐藏中,强类型化:

//snip
public partial class Index : ViewPage<IEnumerable<Project>>
{
//snip

您可能认为放置所有这些模型有点浪费,但如果您明智地使用模型,它会更容易理解,并且会使您的 UI 代码更加简洁。

此外,模型是放置加载数据和构建模型本身的逻辑的好地方(事实上,应该是您执行此操作的地方)。想想 ActiveRecord。而且,当您对所有这些进行编码时,请意识到像 SubSonic 这样的项目可以为您创建模型,没有任何困惑或大惊小怪。

关于c# - 在 MVC View 中迭代匿名类型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/284637/

相关文章:

asp.net-mvc - 我可以在 _Layout.cshtml 中有条件地呈现部分 View 吗?

c# - 错误 : your connection to this site is not private Asp. 网络。 MVC5

c# - 如何访问匿名类型?

c# - 为什么匿名类型不像 ExpandoObject 那样是动态的?

javascript - 父窗口中的 Iframe 的 onSubmit 可以吗?

c# - asp.net将匿名函数参数转换为字符串

c# - EWS 中 ItemView 的最大尺寸是多少?

javascript - 如何从 JavaScript(客户端)调用 Helper Method(服务器端)?

c# - 我们可以向引用匿名类型成员的匿名类型添加方法吗?

c# - 将控制台应用程序转换为 Windows 服务