【问题标题】:Cannot convert lambda expression to type 'object' because it is not a delegate type with an int无法将 lambda 表达式转换为类型“对象”,因为它不是具有 int 的委托类型
【发布时间】:2013-04-27 02:23:39
【问题描述】:

我有一份患者名单。 Patient 类的属性之一是 PatientId,它是一个 int。我的列表初始化如下:

List<Patient> = new List<Patient>() { new Patient { PatientId = 1, 
                                                    FirstName = "Jane", 
                                                    LastName = "Doe"}};

当我在我的视图中访问 PatientId 时:

@Html.DisplayForModel(modelItem => modelItem.PatientId) //Error

我收到一个错误: Cannot convert lambda expression to type 'object' because it is not a delegate type

【问题讨论】:

  • 你试过@Html.DisplayFor(modelItem => modelItem.PatientId)吗?
  • @Carko - 成功了。

标签: c# asp.net-mvc-4


【解决方案1】:

DisplayForModel 实际上使用显示模板来显示您的模型,并且通常不带参数调用。如果这是您想要的,那么您将不得不制作一个新的 DisplayTemplate。对于任何感兴趣的人,这里是 Phil Haack 关于显示模板和 DisplayForModel: http://haacked.com/archive/2010/05/05/asp-net-mvc-tabular-display-template.aspx 的一个很好的教程。

但是,如果您只想为该字段添加标签,那么您应该使用 DisplayFor

@Html.DisplayFor(modelItem => modelItem.PatientId)

【讨论】:

  • 好的,当我自动生成我的视图时,它把除了 PatientId 之外的所有东西都放在了里面,所以它放在了@Html.DisplayForModel(modelItem=&gt;modelItem.FirstName)。我仍然对为什么它不适用于 int 感到困惑。
  • 好吧,我的错,我是个白痴,我不知道为什么我会看到 DisplayForModel,它在所有东西上都有 DisplayFor。是时候换新眼镜了。国际象棋进展如何?
  • @Xaisoft - 真的让我陷入了一个循环,我不知道为什么 DisplayForModel 是为整数自动生成的:P 国际象棋很好。
【解决方案2】:

您混淆了@Html.DisplayFor()@Html.DisplayModelFor()。前者接受一个 lambda。在您的情况下,您可以使用@Html.DisplayFor(model =&gt; model.PatientId)

【讨论】:

  • 谢谢,我看到的是 DisplayForModel,但实际上是 DisplayFor。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多