我刚刚开始使用 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/