У меня есть ListView, который включает EditItemTemplate и InsertItemTemplate. Две формы разделяют почти всю их разметку. Например:
<asp:listview runat="server" ... >
<layouttemplate>...</layouttemplate>
<itemtemplate>
<p><%#Eval("Name")%></p>
<p><%#Eval("Title")%></p>
...
</itemtemplate>
<insertitemtemplate>
<p>Name: <asp:textbox runat=server text='<%#Bind("Name")%>' /></p>
<p>Title: <asp:textbox runat=server text='<%#Bind("Title")%>' /></p>
...
<asp:button runat=server commandname="Insert" text="Save" />
</insertitemtemplate>
<edititemtemplate>
<p>Name: <asp:textbox runat=server text='<%#Bind("Name")%>' /></p>
<p>Title: <asp:textbox runat=server text='<%#Bind("Title")%>' /></p>
...
<asp:button runat=server commandname="Update" text="Save" />
</edititemtemplate>
</asp:listview>
Конечно, на самом деле в шаблонах вставки и редактирования много чего происходит (много полей, с форматированием, проверкой и т. Д.), И я ненавижу поддерживать одну и ту же разметку дважды.
Моей первой мыслью было перенести всю общую разметку в пользовательский элемент управления (.ascx):
<insertitemtemplate>
<custom:myform runat=server />
<asp:button runat=server commandname="Insert" text="Save" />
</insertitemtemplate>
<edititemtemplate>
<custom:myform runat=server />
<asp:button runat=server commandname="Update" text="Save" />
</edititemtemplate>
К сожалению, двусторонняя привязка (text = '<% # Bind ("Foo")%>') работает только в одном случае, когда форма находится в пользовательском элементе управления (она не сохраняет данные из элементов управления вернуться в базу данных).
Альтернативой может быть перемещение всей общей разметки во включаемый файл. Включения на стороне сервера являются возвратом к классическому ASP, но они все еще работают в ASP.NET и могут быть полезны в подобных ситуациях, поскольку содержимое файла включения обрабатывается так же, как разметка, которая находится прямо на странице.
Но включаемые файлы все еще немного обманчивы и имеют свои недостатки (например, VisualStudio с ними не очень удобен). Есть ли альтернатива?