Как удалить элементы управления с runat = "server", указанным в asp.net - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть веб-страница с доступными для сервера элементами управления, см. «FileIconLink» ниже:

<body>
    <p class="FirstTitle style5">Downloads:</p>
    <div id="BreadcrumbDiv">
        <p style="padding-left:5px; ">Page Loading...</p>
    </div><!--/BreadcrumbDiv-->
    <div id="DirLinksDiv">
        <p><span class="SecondTitle">Files:</span></p>
            <a runat="server" href="#" id="FileIconLink">File</a>
            <% WriteFileLinks(); %>
        <p><span class="SecondTitle">Folders:</span></p>
            <a runat="server" href="#" id="FolderIconLink">Folder</a>
    </div><!--/DirLinksDiv-->
</body>
<%RemoveHTMLTemplates(); %>

«FileIconLink» и «FolderIconLink» - это шаблоны веб-элементов управления, которые копируются моим кодом, например <% WriteFileLinks(); %> выше.Как можно безвозвратно удалить эти шаблоны с веб-страницы во время выполнения на сервере, не вызывая ошибки:

Невозможно изменить коллекцию Controls, поскольку элемент управления содержит блоки кода (т. Е. <% ...%>).

Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 27 сентября 2011

Это потому, что у вас есть <%%> внутри элемента управления, который вы пытаетесь изменить. Вместо использования <%%> на странице aspx, я бы изменил код, чтобы добавить литеральный элемент управления или что-то в div, например:

DirLinks.Controls.Add(new LiteralControl(WriteFile()));

После этого вы сможете изменить форму управления с помощью кода.

2 голосов
/ 27 сентября 2011

Ваш встроенный код выполняется во время рендеринга.

Но вы, вероятно, хотите избавиться от шаблонов во время загрузки.

Это означает, что два метода конфликтуют.

1 голос
/ 24 ноября 2011

Объект Page имеет другую функцию, кроме функции Page_Load, которая называется Page_PreRender, эта функция выполняется перед Page_Load. Поэтому, пожалуйста, попробуйте удалить логику в этой функции Page_PreRender. Пожалуйста, обратитесь по этой ссылке http://msdn.microsoft.com/en-us/library/system.web.ui.control.prerender.aspx

1 голос
/ 27 сентября 2011

В конце концов я понял, что мой подход был неправильным, как намекал Cade Roux, и мне нужно было определиться, где будут использоваться шаблоны.

Мое решение было следующим:

  • Создать элементы управления для содержания результатов моего (ранее встроенного) кода.
  • Используйте шаблоны в Page_Load для заполнения описанных выше элементов управления.
  • Удалить шаблоны в Page_Load.
  • Ничего не делать в строке.
...