2015-12-16 2 views
0

Я пытаюсь заполнить простой ретранслятор ASP из базы данных. Запрос работает отлично и возвращает несколько символов типа varchar. Вот мой код, любая проницательность помогла бы многим, я был бы в тупике.Невозможно заполнить ретранслятор System.String 'не содержит свойства с именем

Front End

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

Back End

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»

ответ

2

Ваша проблема в вашем выражении linq -> вы выбираете: .Выберите (u => 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(); 
+0

Почему вы хотите отправить столько данных по сети, если требуется только сборка одного поля? – vendettamit

+0

Я предполагаю, что он не хочет только FormData, но весь элемент. Если ему нужен только FormData, я сказал, что ему не нужен eval –

+0

tldr; .. вопрос об ошибке при использовании Eval(), и ответ должен сначала решить проблему. Вам не нужно догадываться, что вы можете обсудить это с OP с комментариями. :) – vendettamit

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

Спасибо за поддержку! Я думаю, что ваши предложения были правильными, потому что они не работали для меня. Строка «FormData» не была привязана к объекту

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