asp.net-mvc - 我可以将匿名类型传递给我的 ASP.NET MVC View 吗?

标签 asp.net-mvc

我刚刚开始使用 ASP.NET MVC,现在它还处于测试阶段。在我的代码中,我运行一个简单的 LINQ to SQL 查询来获取结果列表并将其传递到我的 View 。这类事情:

var ords = from o in db.Orders
           where o.OrderDate == DateTime.Today
           select o;

return View(ords);

但是,在我看来,我意识到我需要访问每个订单的客户姓名。我开始使用 o.Customer.Name 但我相当确定这会为每个订单执行单独的查询(因为 LINQ 的延迟加载)。

减少查询数量的合理方法是同时选择客户名称。像这样的东西:

var ords = from o in db.Orders
           from c in db.Customers
           where o.OrderDate == DateTime.Today
               and o.CustomerID == c.CustomerID
           select new { o.OrderID, /* ... */, c.CustomerName };

return View(ords);

只不过现在我的“ords”变量是一个匿名类型的 IEnumerable。

是否可以以接受 IEnumerable 作为其 View 数据的方式声明 ASP.NET MVC View ,其中 T 由从 Controller 传递的内容定义,或者我必须定义一个具体类型来填充根据我的查询?

最佳答案

你能把它传递给 View 吗?是的,但是您的 View 不会是强类型的。但 helper 们会工作的。例如:

public ActionResult Foo() {
  return View(new {Something="Hey, it worked!"});
}

//Using a normal ViewPage

<%= Html.TextBox("Something") %>

该文本框应呈现“嘿,它成功了!”作为值。

那么您可以定义一个 View ,其中 T 由从 Controller 传递给它的内容定义吗?是的,但显然不是在编译时。

想一想。当您为 View 声明模型类型时,您就可以获得 View 的智能感知。这意味着必须在编译时确定类型。但问题是,我们能否根据运行时给定的东西来确定类型。当然可以,但不能保留强类型。

如何获得您还不知道的类型的智能感知? Controller 最终可能会在运行时将任何类型传递给 View 。我们甚至无法分析代码和猜测,因为据我们所知,操作过滤器可能会更改传递给 View 的对象。

我希望能够澄清答案,而不是使其更加困惑。 :)

关于asp.net-mvc - 我可以将匿名类型传递给我的 ASP.NET MVC View 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/223713/

相关文章:

.net - LINQ to SQL 和存储库模式

c# - 如何提高返回到 asp.net mvc 中的 View 和输出的包含 5000 个对象的列表的性能?

c# - 通过模型 MVC 加载时数据表的隐藏详细信息选项

html - 在 Bootstrap 中将两个图像并排放置

c# - 在 Visual Studio 中启用 TagHelper Intellisense 支持

c# - 如何将文件写入内存流,压缩其中三个内存流,然后将其放入另一个内存流中?

c# - 如何在 MVC 应用程序中设置 Unity 容器

asp.net-mvc - RequireHttps 导致 Amazon Elastic Load Balancer 上的重定向循环

c# - ASP.Net MVC C# 检索父子子表的最后一篇文章

asp.net-mvc - ASP.NET MVC 路由测试被认为是单元测试还是集成测试?