假设我将Person
@model IEnumerable<Foo.Models.Person>
@foreach (var item in Model)
{
<p>
@Html.DisplayFor(ListOfPersons => item.Id) : @Html.DisplayFor(ListOfPersons =>item.Name)
</p>
}
作为模型传递给视图页面:
IEnumerable
我只是不了解这个Lambda表达式的工作原理。为什么我们传递 SELECT t.*,
IF(@first=t.id, @flag := @flag+1,@flag:=1) `flag`,
@first:=t.id
FROM
(SELECT
coalesce(fx.rate,1) `rate`, (r.value * coalesce(fx.rate,1)) as converted,
r.*, fx.base,fx.target, fx.avg_date, fx.rate frate
FROM
monthly_revenue r
LEFT JOIN
currencies
ON r.currency_id = currencies.id
LEFT JOIN
(SELECT AVG(rate) `rate`,
`base`,
`target`,
STR_TO_DATE(CONCAT('1/',MONTH(rate_date),'/',YEAR(rate_date)), '%d/%m/%Y') avg_date
FROM foreign_exchange
GROUP BY `base`, `target`, `avg_date`
) fx
ON currencies.name = fx.base
AND fx.target = 'USD'
AND fx.avg_date <= STR_TO_DATE(CONCAT('1/',r.month,'/',r.year), '%d/%m/%Y')
ORDER BY r.id, fx.avg_date DESC) t
HAVING `flag` = 1
并在其对象上获得单个值?
答案 0 :(得分:2)
由于ListOfPersons
不是声明的变量,并且只是表达式的参数名称,因此表达式有效。
要简单地触及表达式,它们由参数集和正文组成。
(parameter set) => (body)
参数集可以为空()
或包含1个或多个参数(x)
或(x,y)
。然后,主体可以使用这些参数,类似于方法体将如何使用传入的参数。
@Html.DisplayFor(ListOfPersons => item.Id)
在显示的范围内使用时忽略参数。它不使用它,类似于这样的
public int Id = 5;
public string DisplayFor(Person ListOfPersons)
{
return Id;
}
因此,您可以从这个方面看到该参数未被使用,并且返回的值实际上是来自不同范围的值。
DisplayFor的作用域是使用页面的模型进行绑定。因此,无论参数名称如何,传递给参数的内容都将是模型。因此,由于此处的参数被完全忽略,因此它的名称并不特别重要,可能只是()
或_
。
返回的值是正文中的值,在本例中为item.Id
和item.Name
。但是,由于没有使用参数,即使显示的值看起来准确,所呈现的html也是不正确的。
为了解决这个问题,必须正确访问模型,否则渲染的html不会在帖子上绑定。这通常通过迭代和使用索引引用来完成,如@Jonespolis' answer中所示。
答案 1 :(得分:1)
在剃刀中使用for循环,因此您可以直接引用模型:
@for(int i =0; i < Model.Count(); i++)
{
<p>
@Html.DisplayFor(model => model[i].Id) : @Html.DisplayFor(model => model[i].Name)
</p>
}
答案 2 :(得分:1)
@Html.DisplayFor(ListOfPersons => item.Id) : @Html.DisplayFor(ListOfPersons =>item.Name)
视图引擎将检查表达式并确定您想要&#34;显示&#34; Id
和Name
属性的控件。它忽略了&#34;输入&#34;变量名(本例中为ListOfPersons
*)和item
变量,只解析右侧的表达式。你也可以这样做:
@Html.DisplayFor(_ => item.Id) : @Html.DisplayFor(_ => item.Name)
*请注意,lambda中的ListOfPersons
不会引用局部变量 - 它只会创建一个 new &#34;变量&#34;你可以在你的lambda中引用。您似乎拥有名为ListOfPersons
的属性或局部变量这一事实无关紧要。