Шаблон проектирования для универсального контейнера в ASP.NET - PullRequest
0 голосов
/ 29 июля 2010

У нас есть сайт ASP.NET 3.5 с несколькими страницами поиска, настроенными для поиска.Эти страницы поиска похожи в том, что они ведут себя одинаково и имеют одинаковый дизайн, но фактические поля поиска могут отличаться в зависимости от того, по какой таблице вы ищете.

Я обновляю это, чтобы использовать div и свернуть / развернуть Javascript, чтобы скрыть блоки поля поиска, которые пользователь не использует.Я хочу применить это изменение ко всем страницам поиска (их не менее 10) без необходимости их повторной реализации.Т.е. я хотел бы сохранить весь общий код (Javascript, CSS, базовый HTML и т. Д.) В одном месте и просто реализовать отдельные поля поиска для каждой страницы.Чтобы попытаться показать, о чем я говорю, вот скриншот нового поиска, который я создал:

alt text http://img442.imageshack.us/img442/7661/searchsj.png

В этом примере есть три поля поиска,Владелец, адрес или посылка.В некоторых поисках Parcel будет заменен другим типом поиска, например соседством.Есть ли способ сохранить базовый шаблон в одном месте и просто заполнить содержимое блоков поиска для каждой страницы поиска?Спасибо!

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Вот краткое объяснение одного из способов сделать это:

Создайте базовый элемент управления, назовите его BaseSearchControl , сделайте его абстрактным, чтобы его нельзя было создать напрямую. Он может реализовать интерфейс, назовите его ISearch . Интерфейс ISearch может предоставлять такие свойства, как SearchExpression , BaseSearchControl может реализовывать эти свойства / функции интерфейса абстрактно или виртуально (абстракция означает, что любые дочерние элементы управления реализовать его, виртуальный означает, что они могут переопределить его).

Каждый из ваших элементов управления поиском должен затем быть производным от BaseSearchControl и иметь свой собственный пользовательский интерфейс. Поскольку они также реализуют ISearch (прямо или косвенно, в зависимости от того, какие свойства / функции вы делаете виртуальными или абстрактными в BaseSearchControl ), родительский элемент управления контейнера может легко перечислить их (по базе тип или тип интерфейса) и последовательно их опрашивать.

1 голос
/ 29 июля 2010

Я не вижу, чтобы HTML для блоков поиска был настолько сложным, поэтому было бы излишне пытаться каким-либо образом их шаблонировать, просто разработайте стандартную структуру, с которой вы можете повторно использовать CSS и Javascript.

Вот кое-что, с чего можно начать (я предполагаю, что использование jQuery или другой библиотеки приемлемо, пожалуйста, обновите вопрос, если нет):

<div class="search-box">
    <form action="#" method="get">
        <h2>Search by Owner Name</h2>
        <fieldset>
            ... the search form ...
        </fieldset>
    </form>
</div>
<div class="search-box">
    <form action="#" method="get">
        <h2>Search by Owner Name</h2>
        <fieldset>
            ... the search form ...
        </fieldset>
    </form>
</div>
<div class="search-box">
    <form action="#" method="get">
        <h2>Search by Owner Name</h2>
        <fieldset>
            ... the search form ...
        </fieldset>
    </form>
</div>

.search-box {
    border: 1px solid #ccc;
}
.search-box h2 {
    background: transparent url(images/gradient.png) repeat-x;
    border: 1px solid #aaa;
    cursor: pointer;
}

.search-box.closed fieldset {
    display: none;
}

$(document).ready(function() {
    $('.search-box').addClass('closed').find(':first').removeClass('closed');
    $('.search-box h2').click(function() {
        // This is where you might implement some animation, or use an accordian plugin
        $('.search-box:not(.closed)').addClass('closed');
        $(this).parents('.search-box').removeClass('closed');
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...