Остановка отображения фильтра в веб-приложении Dynamic Data Entity - PullRequest
0 голосов
/ 26 апреля 2010

В настоящее время я экспериментирую с типом проекта веб-приложения Dynamic Data Entity в пакете обновления 1 (SP1) для VS2008, и после прочтения множества учебных пособий, в которых предлагаются полезные советы по решению проблем, мне до сих пор не нужно решение проблемы, с которой я столкнулся при первом препятствии.1001 *

В БД, из которой я сделал свою модель сущности, я решил начать с малого со таблицы под названием «Компании», просто чтобы посмотреть, смогу ли я настроить дисплей в удовлетворительную форму для этой маленькой таблицы.В таблице «Компании» имеется столбец с именем «contactid», в результате чего в таблице «контактов» появляется запись, заполненная различными контактными данными.

Созданная по умолчанию модель данных сущностей догадалась, что у одной компании может быть много записей о контактах.Поэтому он пытается быть полезным и добавляет на страницу фильтр «Контакты», который позволяет просматривать все компании, которые используют определенный набор контактных данных, проиндексированных в поле «Имя контакта».

К сожалению, контактТаблица является многоцелевой, которая также хранит контактную информацию для клиентов, и клиентов примерно в 1000 раз больше, чем компаний.Таким образом, выпадающий список увеличивает время загрузки страницы в геометрической прогрессии и не дает никаких преимуществ.

Так что я бы хотел просто остановить появление фильтра.Единственная проблема в том, что я понятия не имею, как это отключить.Google до сих пор доказывает свою непокорность по этому вопросу, поэтому мне стало интересно, знает ли кто-нибудь здесь, как избавиться от бесполезного фильтра.

1 Ответ

1 голос
/ 03 ноября 2010

У меня недавно была такая же проблема. Я новичок в шаблоне приложения динамических данных и был быстро впечатлен его готовой функциональностью. Однако я также отметил несколько неудач, в частности ту, которую вы упомянули. Несколько моих страниц загружались вечно, и когда я обнаружил, что это было вызвано заполнением внешнего ключа, мне потребовалось некоторое время, чтобы найти решение. Проблема заключается в том, что это поведение важно для внутренней работы веб-сайта. Эти выпадающие списки внешнего ключа фактически управляют набором результатов в сетке данных. (Список ddlist заполняется, затем устанавливается значение по умолчанию, которое вызывает событие для фильтрации сетки данных.) Поэтому ключ заключается в том, чтобы изменить это поведение вместо того, чтобы отключать его. Моя первая подсказка в решении этой проблемы пришла из отличной серии блогов, которые я нашел в Интернете. Слава Стивену Нотону Идея состоит в том, чтобы создать атрибут metacolumn и украсить проблемные объекты в ваших метатируемых частичных классах. (Я назвал мой DisableFilter)

Итак, в итоге вы получите таблицу и метатическое определение частичного класса, подобное:

[MetadataType(typeof(InvoiceMetadata))]
public partial class Invoice { 

}

public partial class InvoiceMetadata {
    [ScaffoldColumn(false)]
    public string InvoiceId { get; set; }
    [ScaffoldColumn(false)]
    public string LiquidatorInvoiceId { get; set; }
    [ScaffoldColumn(false)]
    public string CreatedBy { get; set; }
    [ScaffoldColumn(false)]
    public System.Nullable<System.DateTime> LastModifiedDate { get; set; }
    [ScaffoldColumn(false)]
    public string LastModifiedBy { get; set; }
    [DisableFilter]
    public LeadAccount LeadAccount { get; set; }
}

Мой недавно созданный атрибут DisableFilter украшает коллекцию LeadAccount (наша таблица контактов).

После оформления столбца я изменил базовое поведение элемента управления ForeignKey.ascx, добавив проверку нового атрибута. Если фильтр отключен, я только заполняю список ddlist элементом по умолчанию.

if (!Page.IsPostBack) {
            if (!Column.IsRequired) {
                DropDownList1.Items.Add(new ListItem("[Not Set]", NullValueString));
            }
            if (Column.IsFilterDisabled()) {

                DropDownList1.Items.Add(new ListItem(DefaultValue, DefaultValue));
            }
            else {
                PopulateListControl(DropDownList1);
            }
            // Set the initial value if there is one
            string initialValue = DefaultValue;
            if (!String.IsNullOrEmpty(initialValue)) {
                DropDownList1.SelectedValue = initialValue;
            }
        }
    }

Это не совсем то, что я называю полным решением, в основном значение фильтра не будет содержать понятного имени. Я еще не удосужился решить эту проблему, но это должно сделать вас на шаг ближе к решению вашей проблемы.

...