Не может ссылаться на динамические объекты во встроенном коде ASPX - PullRequest
6 голосов
/ 14 января 2011

Я создаю переменную члена List во время моего события Page_Init.У меня проблема со ссылкой на объекты в списке из моего встроенного кода C # на странице * .aspx.Эта ошибка является Исключением Runtime Binder, которое говорит, что «объект» не содержит определения для «JobID».

Когда вызывается отладчик, я вижу, что переменная j цикла foreach действительно имеет динамическийсвойство с именем JobID и заполнено значением int.Итак, мой вопрос, почему мой встроенный код C # не может работать с динамическим объектом.Есть ли оператор <% @ Import%>, который мне нужен для работы с динамическими объектами?Я попытался добавить <% @ Import namespace = "System.Dynamic"%>, но это не помогло.

Спасибо за помощь.Марка

Код сзади:

 using System;
    using System.Collections.Generic;
    using System.Linq;
    using Jobbarama.WebCode;
    using DataModel;


    public partial class contact : System.Web.UI.Page
    {
        public List<dynamic> JobList { get; set; }

        protected void Page_Init(object sender, EventArgs e)
        {
            SessionManager mgr = SessionManager.Current;

                using (myEntities context = new myEntities())
                {
                    var qry = from c in context.vjobList
                        where c.CampaignID == mgr.CampaignID
                        select new
                        {
                            c.JobID, c.JobTitle, c.CompanyName, c.InterestDate, c.InterestLevel
                        };

                    JobList = qry.ToList<dynamic>();
                }
            }

        }
    }

Код ASPX:

<select id='cboJob' name='cboJob' style='width: 150px;'>
   <%foreach (var j in JobList){ %>
      <option value="<%=j.JobID %>"><%=j.JobTitle%> [<%=j.CompanyName%>]</option>
   <%} %>
</select>

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

А как насчет использования LinqDataSource, установки команды OnSelecting и использования ретранслятора или списка данных для отображения?

1 голос
/ 28 февраля 2011

Полагаю, это может быть проблема с правами доступа из-за использования анонимного класса и поздней компиляции aspx в разных сборках.

Для этой работы можно использовать impromptu-interface .

using ImpromptuInterface

затем вы создаете интерфейс (я использую динамический, потому что я не знаю ваши типы)

interface ISelectJob
 dynamic JobID
 dynamic JobTitle
 dynamic CompanyName
 dynamic InterestDate
 dynamic InterestLevel
}

Ваша собственность должна использовать интерфейс

public List<ISelectJob> JobList { get; set; }

И чтобы создать свой список, просто добавьте .AllActLike<ISelectJob>()

JobList = qry.AllActLike<ISelectJob>().ToList();

И это должно сработать, так как он генерирует легкий прокси-сервер dlr и устанавливает контекст для анонимного класса сам, так что он думает, что у него всегда есть доступв отличие от вызова с динамическим ключевым словом.

...