模板只能用于字段访问表达式,访问属性,维度的数组索引或参数自定义索引器

时间:2014-10-17 09:14:12

标签: asp.net-mvc entity-framework

我有这个型号:

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:

<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)

但是我收到以下错误: “模板只能用于字段访问表达式,访问属性,维度的数组索引或参数自定义索引器”

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

2 个答案:

答案 0 :(得分:1)

你应该替换

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

@Html.EditorFor(item => item);

同样替换

也是个好主意
@foreach (var item in Model.Ingresos)

@foreach (IngresoProyecto item in Model.Ingresos)

这样就可以正确识别您的模型类型并解决问题。

答案 1 :(得分:0)

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

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