关于asp.net mvc:模板只能与字段访问表达式、访问属性、维度的数组索引或参数自定义索引器一起使用

Templates can be used only with field access expressions , access properties, array index of a dimension or a parameter custom indexer

我有这个模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class Proyecto
{
    #region Atributos
    [DisplayName("Código")]
    public string ProyectoID { get; set; }

    public string OportunidadID {get;set;}
    [DisplayName("Nombre")]
    public string Nombre { get; set; }

    [DisplayName("Fecha inicio")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString ="{0:d}")]
    public DateTime FechaInicio { get; set; }

    public string CodigoCliente { get; set; }

    public string TipoClienteTelco { get; set; }

    public string Sector { get; set; }

    public string AmbitoProyecto { get; set; }

    public string DescripcionServicio { get; set; }

    public string TipoServicio { get; set; }

    public DateTime CierreOperativo { get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString ="{0:d}")]
    public DateTime FechaCierreTeorica { get; set; }

    [DataType(DataType.Date)]
    [DisplayName("Fecha fin")]
    [DisplayFormat(DataFormatString ="{0:d}")]
    public DateTime FechaCierreReal { get; set; }

    public string EnquestaCalidad { get; set; }

    [DisplayName("Estado")]
    public Valoracion Estado { get; set; }

    [DisplayName("Tendencia")]
    public Valoracion Tendencia { get; set; }

    public virtual Oportunidad Oportunidad { get; set; }

    public virtual ICollection<AsientoProyecto> Asientos { get; set; }
    public virtual ICollection<IngresoProyecto> Ingresos { get; set; }
    public virtual ICollection<AsignacionProyecto> Asignaciones { get; set; }
    public virtual ICollection<Tag> Tags { get; set; }
    public virtual ICollection<Comentario> Comentarios { get; set; }
    #endregion
}

在我看来,我尝试使用这个 sintax 插入一个 @Html.EditorFor:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<tr>
    <th>Ingresos</th>
     @foreach (var item in Model.Ingresos)
     {
         if (item.Fecha.Month < DateTime.Now.Month && item.Fecha.Year <= DateTime.Now.Year)
         {
             <td>item.Cantidad €</td>
         }
         else
         {
          @Html.EditorFor(model => Model.Ingresos.Where(i => i.ID == item.ID));
         }
     }
 </tr>

我要做的是添加一个输入文本框,用于更新"Proyecto"的 Icollection 的"Ingreso"(我的模型是 Proyecto)

但我收到以下错误:
"模板只能与字段访问表达式、访问属性、维度的数组索引或参数自定义索引器一起使用"

谁能解释我在这里做错了什么?
谢谢!


你应该替换

1
@Html.EditorFor(model => Model.Ingresos.Where(i => i.ID == item.ID));

1
@Html.EditorFor(item => item);

最好也替换

1
@foreach (var item in Model.Ingresos)

1
@foreach (IngresoProyecto item in Model.Ingresos)

这样您的模型类型应该被正确识别并解决问题。


在 EditorFor 模板中,您尝试评估表达式以产生与使用模板相反的结果,其中创建变量以获得您期望的结果,然后传递给编辑器模板。

1
2
3
4
{
    var filteredIngreso = Model.Ingresos.Where(i => i.ID == item.ID);
    @Html.EditorFor(model => filteredIngreso);
}