ASP.NET ListView с одинаковой разметкой в ​​EditItemTemplate и InsertItemTemplate

У меня есть 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 не очень-то им удобен). Есть ли альтернатива?

Ответы на вопрос(2)

Ваш ответ на вопрос