我正在研究MVC,它向用户显示请求列表.该模型看起来像这样:
public class RequestModel
{
public string Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器看起来像这样:
public ActionResult Index()
{
return View(db.Requests.ToList());
}
Run Code Online (Sandbox Code Playgroud)
我希望索引视图页面显示状态为"待定"的请求列表,我尝试使用以下代码:
<table class="table">
@foreach (var item in Model)
{
<tr>
<td>
@if (modelItem => item.Status == "Pending")
{
@Html.DisplayFor(modelItem => item.Status)
}
</td>
</tr>
}
</table>
Run Code Online (Sandbox Code Playgroud)
但是,这给了我以下错误:
无法将lambda表达式转换为"bool"类型,因为它不是委托类型.
我不确定这些错误意味着什么,以及如何解决它.如果有人有任何帮助或建议我会非常感激.
你的病情应该是这样的:
@if (item.Status == "Pending")
Run Code Online (Sandbox Code Playgroud)
您正在尝试使用lambda表达式(modelItem => item.Status == "Pending"),您应该使用简单条件.
通过编写此代码,modelItem => item.Status == "Pending"您定义了一个函数:
Func<string,bool> someFunc = (str) => str == "Pending";
Run Code Online (Sandbox Code Playgroud)
你会发现你的 if 语句看起来像下面这样,这意味着你有一个委托对象,而不是bool在 if 语句中进行评估。
if(someFunc) // causes compilation error
{
// some code
}
Run Code Online (Sandbox Code Playgroud)
请注意,它没有调用该函数并评估布尔结果,这将是:
if(someFunc(item.Status))
{
// some code
}
Run Code Online (Sandbox Code Playgroud)
要更正它,请删除modelItem =>
如果在视图中您始终希望项目具有“待处理”状态,请考虑将过滤逻辑移至控制器,但Where在返回的集合上添加一个子句。