我正在研究MVC,它向用户显示请求列表。该模型看起来像这样:
public class RequestModel
{
public string Status { get; set; }
}
控制器看起来像这样:
public ActionResult Index()
{
return View(db.Requests.ToList());
}
我希望索引视图页面显示状态为" Pending"的请求列表,我尝试使用以下代码:
<table class="table">
@foreach (var item in Model)
{
<tr>
<td>
@if (modelItem => item.Status == "Pending")
{
@Html.DisplayFor(modelItem => item.Status)
}
</td>
</tr>
}
</table>
然而,这给了我以下错误:
无法将lambda表达式转换为&#34; bool&#34;因为它不是委托类型。
我不确定这些错误意味着什么,以及如何解决它。如果有人有任何帮助或建议我会非常感激。
答案 0 :(得分:5)
您的情况应如下:
@if (item.Status == "Pending")
你正在尝试使用lambda表达式(modelItem => item.Status == "Pending"
),你应该使用简单的条件。
答案 1 :(得分:4)
通过编写此modelItem => item.Status == "Pending"
,您将定义一个函数:
Func<string,bool> someFunc = (str) => str == "Pending";
你知道你的if语句看起来像下面的那样,这意味着你没有在if语句中评估bool
,而是有一个委托对象。
if(someFunc) // causes compilation error
{
// some code
}
请注意,它没有调用函数并计算布尔结果:
if(someFunc(item.Status))
{
// some code
}
要更正它,请删除modelItem =>
如果在“查看”中,您始终需要具有&#34;待定&#34;状态然后考虑将过滤逻辑移动到控制器,但在返回的集合上添加Where
子句。
答案 2 :(得分:3)
正如其他答案所示,@if (item.Status == "Pending")
应该可以解决您的问题。
modelItem => item.Status == "Pending"
创建 Func
。 (如果您不熟悉匿名方法和lamda表达式,这些视频将非常有用:Tuts+,kudvenkat和kudvenkat)
此外,如果您只想在视图中使用待处理项目,则可以在Controller中自行过滤它们。如果您的请求表有数千条记录,那么在您的视图中循环遍历这些记录效率不高
public ActionResult Index()
{
return View(db.Requests.Where(r => r.Status == "Pending").ToList());
}