Я на правильном пути (ASPX, ascx, дизайн)

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

Я начал с 2 страниц, без проблем. Я написал один и тот же (copy-paste) код для каждой страницы (дайте или возьмите пару деталей). Продажи дали (приманку) это клиенту, и клиент проголодался... больше больше БОЛЬШЕ... Теперь у меня есть 10 страниц с более или менее одинаковым кодом.

Теперь я подумал, можно ли сократить время разработки, используя те же "элементы управления". Так что начал делать некоторые ascx (4), думая, что я мог бы использовать эти 4 элемента управления на каждой странице (сотрудник, клиент, продажи, блог).

Я сталкиваюсь с небольшим уловком, и Google говорит мне - "нет, нет, это не то, как вы используете ascx". Ascx просто новый "asp:label"/"asp:textbox"с, возможно, немного дополнительной логикой в.

Схватка - я сделал NewTest.aspx с каждым из 4-х элементов управления, но я не вижу asp:formview / asp:detailsview и т. д. из органов управления. Я могу поместить "привет миры" вокруг формы, прямо перед, сразу после - но не внутри <formview></formview>,

Куда я иду не так, что мне нужно пересмотреть?

NewTest.aspx

    <table width="800">
        <tr>
            <td>
                <IIT:EmployeeRecord ID="test1" runat="server" />
            </td>
        </tr>
     </table>

Я использую ObjectDataSource и извлекаю идентификатор сотрудника из сессии. Запись сотрудника - его имя, выпадающий список с почтовыми индексами (только для salesrep) и поле поиска. В основном текстовое поле (я) с небольшой дополнительной логикой.

Вся базовая логика (BLL, DAL, Модели и т. Д.) Абсолютно одинакова. Остальная часть проекта компилируется и запускается точно так же, как прежде, чем я начал с ascx.

Изменить: я стараюсь KSS это, если я могу показать EmployeeRecord, то я могу скопировать и вставить эту идею.

Начать в webconfig:

<pages>
<controls>
    <add tagPrefix="IIT" tagName="Comments" src="~/DynamicData/FieldTemplates/Comments.ascx" />
    <add tagPrefix="IIT" tagName="OrderRecord" src="~/DynamicData/FieldTemplates/OrderRecord.ascx" />
    <add tagPrefix="IIT" tagName="CustomerRecord" src="~/DynamicData/FieldTemplates/CustomerRecord.ascx" />
    <add tagPrefix="IIT" tagName="EmployeeRecord" src="~/DynamicData/FieldTemplates/EmployeeRecord.ascx" />
  </controls>
</pages>

Intellisense может распознавать EmployeeRecord и OrderRecord, но не Комментарии и CustomerRecord. Изменить: Intellisense теперь распознает их всех.

EmployeeRecord

<asp:formview ID="fv_empDetail" runat="server" datasourceID="ods_empDetail">
<itemtemplate>
<table>
    <tr>
        <td>
        Medarbejder:
        </td>
    <td>
<asp:TextBox ID="tbEmployeeName" runat="server" ReadOnly="true" Text='<%# Bind("name") %>' BorderStyle="None"></asp:TextBox>
</td></tr>
</table>
</ItemTemplate>
</asp:FormView>
    <asp:ObjectDataSource ID="ods_empDetail" runat="server" SelectMethod="GetEmployee"
     TypeName="xxxxxx.EmployeeBLL">
     <SelectParameters>
         <asp:SessionParameter Name="employee" DbType="String" SessionField="employee" />
     </SelectParameters>
 </asp:ObjectDataSource>

(Любые опечатки только для вашего удовольствия;), в реальном коде опечаток нет)

3 ответа

Решение

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

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

Вы также можете перейти по ссылке для разработки пользовательского элемента управления, заданной @Umar, или обратиться к следующему:

Создать пользовательский элемент управления ASP.NET

Мой пользовательский контроль

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

Если я правильно понял вашу проблему, то вы пытаетесь поместить веб-элементы управления (пользовательские или иные) в свои собственные элементы управления.

Я думаю, что вы пытаетесь создать шаблонные элементы управления ASP.NET. Пожалуйста, смотрите статью Как: создавать шаблонные элементы управления ASP.NET.

Это позволит вам написать что-то вроде следующего в ваших файлах ASPX/ASCX.

<uc:TemplateTest runat="server">
  <MessageTemplate>
    <asp:Label runat="server" ID="Label1" Text='Foo!!' />
    <br />
    <asp:Label runat="server" ID="Label2" Text='Bar!!' />
    <hr />
  </MessageTemplate>
</uc:TemplateTest>

NB. Этот пример был адаптирован из статьи, указанной выше.

Обратите внимание, как два asp:Label теги существуют внутри MessageTemplate элемент uc:TemlpateTest,

Другие вопросы по тегам