所以我在viewdata语句中打包了一些查询结果。
我可以使用此指令验证在视图中将正确数量的结果放入viewdata对象中:
@foreach (var action in (List<LemonadeTrader.Models.Message>)ViewData["messages"]) {
当我尝试显示结果时:
@Html.DisplayFor( (LemonTrader.Models.Message)action.msg) // action.msg should be of type string
它说它无法将字符串转换为LemonTrader.Models.Lemon。
当我把它投射为:
@Html.DisplayFor( (string)action.acidity)
它说:
方法的类型参数 “System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc. 的HtmlHelper, System.Linq.Expressions.Expression&GT)” 无法从使用中推断出来。尝试 指定类型参数 明确。
完全没有施放它也不起作用。
如何投射结果?
答案 0 :(得分:1)
DisplayFor/EditorFor
适用于强类型视图和视图模型。它将lambda表达式作为第一个参数,它表示您尝试显示/编辑的视图模型上的属性。所以将这个ViewData
扔进垃圾箱(它所属的地方)并使用视图模型和强类型视图。
所以不是以下恐怖:
@foreach (var action in (List<LemonadeTrader.Models.Message>)ViewData["messages"]) {
您将拥有一个视图模型,其Message属性的类型正确:
@foreach (var action in Model.Messages) {
甚至更好(为什么在dislpay /编辑模板已经执行此操作时编写foreach
循环):
@Html.DisplayFor(x => x.Messages)
这样你获得了很多奖金:
答案 1 :(得分:0)
我认为这只是一个语法错误,因为DisplayFor需要一个将模型作为输入的Func。
试试这个:@Html.DisplayFor(m => (string)action.acidity)
答案 2 :(得分:0)
这有效:
@foreach (var action in (List<LemonTrader.Models.Message>)ViewData["lemons"]) {
<tr>
<td>
@Html.Encode( action.acidity)