无法填充转发器System.String'不包含具有该名称的属性

时间:2015-12-16 20:52:58

标签: datasource eval repeater

我正在尝试从数据库中填充一个简单的ASP转发器。查询工作正常,并返回几个varchar类型的字符。这是我的代码,任何见解都会有很多帮助,我很难过。

前端

<asp:Repeater ID="Repeater1" runat="server">
  <ItemTemplate>
    <p> <%#  Eval("FormData")%> </p>
  </ItemTemplate>
</asp:Repeater>

后端

public void Page_Load(object sender, EventArgs e)
    {
        Repeater1.DataSource = GetKudosList();
        Repeater1.DataBind();

    }


        public List<string> GetKudosList()
        {
            using (IntranetEntities KudosContext = new IntranetEntities())
            {
                var jon = KudosContext.FormInstances.Where(u => u.WorkflowID == 1).Select(u => u.FormData).ToList();
                return jon;
            }

        }

即使我只是在后端创建一个列表对象而没有触及数据库,我仍然会得到以下错误 'System.String'不包含名称为'FormData'

的属性

3 个答案:

答案 0 :(得分:2)

您的问题出在您的linq声明中 - &gt;您正在选择:.Select(u =&gt; u.FormData).ToList();

你将得到一个FormData类型的列表,它可能是String的类型...(导致eval失败。你试图在一个简单的字符串上eval属性“FormData”)

使用不带eval的项目,或删除选择:

选项1: 您只需要来自对象的FormData: 按原样使用linq,更改转发器模板:

<p> <%#  Container.DataItem %> </p>

选项2: 你需要整个对象,并且想要显示它的属性, 改变你的linq:

var jon = KudosContext.FormInstances.Where(u => u.WorkflowID == 1).ToList();

答案 1 :(得分:0)

更改linq查询以选择匿名类型而不是字符串。

var jon = KudosContext.FormInstances
                      .Where(u => u.WorkflowID == 1)
                      .Select(u => new { FormData = u.FormData}).ToList();

现在,您可以使用DataBinder从匿名类型获取属性名称:

<asp:Repeater ID="Repeater1" runat="server">
  <ItemTemplate>
    <p> <%# (string)DataBinder.Eval(e.Item.DataItem, "FormData"); %> </p>
  </ItemTemplate>
</asp:Repeater>

答案 2 :(得分:0)

感谢所有支持!我认为你的建议是正确的,但他们不适合我。字符串&#34; FormData&#34;没有绑定到对象

<%# this.GetDataItem().ToString() %>