Преобразование HTML-строки в серверный элемент управления в ASP.Net - PullRequest
2 голосов
/ 01 октября 2010

У меня есть проблема, поэтому надеюсь, что вы, ребята, можете помочь! У меня есть строка в коде, как это

string html = "<asp:CheckBox ID=\"CheckBox1\" runat=\"server\" />";

Итак, как вставить его в aspx-страницу и когда страница рендерится, она преобразует мою строку, когда я пишу ее на веб-странице

Надеюсь, вы, ребята, можете помочь

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

Позвольте мне сначала сказать, поэтому я должен использовать этот способ, потому что я делаю свой собственный шаблон проекта У меня есть HTML-файл, такой как index.html, и внутри есть некоторый HTML-код, подобный этому

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
      <title>
        {title_page}
      </title>
    <link href="css/temp_css.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="somejs.js"></script>
    <script type=”text/javascript”>
        //code js here
    </script>
   </head>
   <body>
    <div>**{main_menu}**</div>
    <div>**{footer}**</div>
   </body>
</html>

Все вы, ребята, можете видеть мою собственную разметку ({main_menu}, {footer}), я просто хочу заменить свой пользовательский веб-контроль на эту разметку при рендеринге страницы, вот и все!

Есть идея отпустить меня с этого пути?

Ответы [ 7 ]

2 голосов
/ 01 октября 2010

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

protected void Page_Init(object sender, EventArgs e)
{
    CheckBox checkBox = new CheckBox();
    checkBox.ID = "CheckBox1";
    Page.Controls.Add(checkBox); // Replace Page with any other Control to add to
}
1 голос
/ 10 марта 2012

Использовать литералы:

<code>string html = "<asp:CheckBox ID=\"CheckBox1\" runat=\"server\" />";
Literal lt = new Literal();
lt.Text = html;
ServerDIV.Controls.Add(lt);
</code>
0 голосов
/ 01 октября 2010

Для моей CMS я сделал нечто подобное. Смотрите следующие вопросы: Как динамически отображать элементы управления asp.net из строки?

0 голосов
/ 01 октября 2010

Вы хотите использовать

Template.ParseControl

http://msdn.microsoft.com/en-us/library/kz3ffe28.aspx

0 голосов
/ 01 октября 2010

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

Сказав это, ваш вопрос заставил меня задуматьсяпочему бы не использовать событие Render?

Когда событие Render переопределяется, разработчик может записать пользовательский HTML-код в браузер. Метод Render принимает объект HtmlTextWriter в качестве параметра и использует его для вывода HTML-кода для потоковой передачи в браузер. На этом этапе все еще можно вносить изменения, но они отражаются только для клиента.

Что-то в строках: -

protected override void Render(HtmlTextWriter output) 
{
    output.Write ("<h3> Hello </h3>");
}

Если вы вставитеВаша HTML-строка здесь, я предполагаю, что она должна работать.

Примечание 1. Поскольку это изменение отражается только на клиенте, я серьезно сомневаюсь, как вы могли бы сделать с ним что-нибудь полезное, даже если вы в конечном итоге получили хотя быклиент, отображающий ваши элементы управления

Примечание 2: То, что я никогда не пытался сделать что-то подобное, но ваш вопрос только заставил меня задуматься !!

0 голосов
/ 01 октября 2010

Серверная разметка для элементов управления - это не просто текст - visual sutdio создает поле с правильным типом и устанавливает различные атрибуты в коде.

Это, конечно, не происходит с простымстрока, как в вашем примере кода.

Если вы хотите динамически добавить элемент управления, вам необходимо создать его в своем коде и добавить его на страницу кода (см. ответ из GenericTypeTea).

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

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

Из ваших правок я понимаю, что вы пытаетесь выполнить, однако это очень сложная проблема.

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

Почему нельзя просто использовать главные страницы и элементы управления?

0 голосов
/ 01 октября 2010

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

ASPX:

<asp:Panel id="panel1" runat="server" ...>

код-за:

    var cb = new CheckBox();
    cb.ID = "CheckBox1";
    cb.Text = "text ...";
    //.. set properties of checkbox
    panel1.Controls.Add(cb);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...