asp.net-mvc – 我可以传递一个匿名类型到我的ASP.NET MVC视图?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 我可以传递一个匿名类型到我的ASP.NET MVC视图?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚开始使用ASP.NET MVC,因为它是测试版。在我的代码中,我运行一个简单的LINQ to SQL查询获取结果列表并将其传递到我的视图。这种事情:
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。

是否可以声明一个ASP.NET MVC视图,它接受一个I​​Enumerable作为其视图数据,其中T由从控制器传递的内容定义,或者我必须定义一个具体类型从我的查询填充?

解决方法

你能把它传递给视图吗?是的,但您的视图不会被强烈打字。但帮助者会工作。例如:
public ActionResult Foo() {
  return View(new {Something="Hey,it worked!"});
}

//Using a normal ViewPage

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

那个文本框应该呈现“嘿,它工作!作为值。

所以,你可以定义一个视图,其中T是由从控制器传递给它的内容定义的?是的,但不是在编译时明显。

想想一会儿。当你声明一个视图的模型类型,它是所以你得到视图的intellisense。这意味着类型必须在编译时确定。但问题问,我们可以确定从运行时给它的东西的类型。当然,但不是强类型保留。

你如何获得Intellisense一个你甚至不知道的类型?控制器最终可以在运行时将任何类型传递给视图。我们甚至不能分析代码和猜测,因为动作过滤器可以改变传递给视图的对象,我们知道。

我希望澄清的答案,没有混淆它更多。

猜你在找的asp.Net相关文章