Я на правильном пути (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.
Это позволит вам написать что-то вроде следующего в ваших файлах 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
,