2013-12-20 4 views
0

Есть ли способ повторно использовать часть кода ASP.NET (код на основе тегов, а не код) на многих разных страницах? Например, у меня есть <div> с некоторым содержимым в нем, которое появляется на 5 разных страницах моего сайта. Я ищу технику, с помощью которой я мог бы сохранить этот <div> в отдельном веб-сайте, так сказать, с другим расширением, например MyDiv.ASPC, и затем мог бы делать тег на стороне сервера в любом месте веб-страницы:Повторное использование кода ASP.NET на нескольких страницах

<asp:Import href="~/MyDiv.aspc" /> 

и ASP.NET будут вставлять весь контент этого файла в тот момент, когда появляется этот тег.

Я думал о создании пользовательского элемента управления для этого, но я не уверен, что пользовательский элемент управления всегда вводит именно то, что написано в его теле, или иногда могут быть нежелательные теги, созданные самим пользователем.

Или существуют ли лучшие способы сделать это?

Редактировать

О Master Pages, они далеки от того, что я ищу. Они действительно хороши для общей базовой компоновки вашего сайта. Моя идея совершенно противоположна этому. Мои страницы не имеют общего расположения; это просто, что у них есть один общий <div>. Он более точно выполняется UserControl.

Для UC мой страх в том, что они генерируют больше, чем то, что написано в их теле, тогда как то, что мне нужно, - это простая инъекция текста. Чтобы сказать это технически, то, что я ищу, в основном является шагом препроцессора (вроде #include thing в C++), а не шагом компилятора, если вы понимаете, что я имею в виду.

+3

Да, они называются [главными страницами] (http://msdn.microsoft.com/en-us/library/wtxbf3hh.ASPX), пользовательские элементы управления предназначены для многократного использования ... элементов управления, размещенных на нескольких страницах (их Содержимое HTML не изменяется на каждой странице). –

+1

Мастер-страницы, да, и пользовательские элементы управления тоже очень хорошо работают (они не меняют теги, просто имена и идентификаторы). – Luaan

+0

Ах нет. У главных страниц есть несколько проблем. На самом деле они совершенно противоположны тому, чего я пытаюсь достичь. – dotNET

ответ

1

Вы должны использовать ASP.NET пользовательских элементов управления, так как они специально созданы, чтобы быть решением проблемы, которую вы описываете. Для получения дополнительной информации см. MS Documentation.

Из их документации ...

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

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

0

Ran короткий тест. Элементы управления пользователя не вводят дополнительные теги, если вы не помещаете в них теги Runat = «Server», поэтому это действительно было бы решением, которое я предполагаю.

Вы также можете прочитать выходные данные из объекта кеша, где вы будете читать ваши файлы.

Так

<%= Static.ContentXyz %> 

будет означать:

public static class Static 
{ 
    public static string ContentXyz 
    { 
     get 
     { 
      string s; 

      if (!this.cacheDictionary.TryGetValue("ContentXyz", out s)) 
      { 
       s = File.ReadAllText(Server.MapPath("ContentXyz.html")); 
       this.cacheDictionary("ContentXyz", s); 
      } 

      return s; 
     } 
    } 
} 
+0

Спасибо. Если у меня есть тег на стороне сервера, скажите '' в моем UC, он все еще выплюнет его, если я удалю 'runat'? – dotNET

+0

Ну, это так, но не так, как вы хотите. Когда вы используете текстовое поле без тега asp.net runat = "server", вам лучше использовать тег ввода html (так как без runat = "server" вы не можете получить к нему доступ, поэтому нет необходимости в управлении asp.net). –

+0

Позвольте мне обернуть мою голову вокруг этого второго подхода. Таким образом, этот код будет вводить содержимое 'ContentXyz.html' (который сам является серверным кодом ASP.NET) в точке, где отображается' <% = Static.ContentXyz%> '. Но это произойдет во время выполнения. Теперь, кто будет запускать второй проход на веб-странице, чтобы генерировать HTML из этого содержимого? Откуда я вижу, это отправит содержимое «ContentXyz.html» в браузер пользователя. – dotNET

1

Пустой пользовательский контроль будет делать именно это - ничего. Пользовательский элемент управления просто добавляет его содержимое на страницу или пользовательский хостинг. Он ничего не добавляет.

UserControls дает вам хороший простой способ фрагментации фрагмента страницы для повторного использования контента. Они отлично работают в рамках проекта & большинство людей используют их именно для этого.

Если вы хотите сделать что-то более многоразовое для проектов, вы можете написать серверный контроль. Это более активное участие, но гораздо более многоразовое. Google должен уметь находить множество руководств о том, как это сделать.

Смежные вопросы