RmcbainTheThird Ответов: 2

Как выполнить серверный код с динамическим HTML на странице aspx


Я строю некоторые HTML и присвоения его внутренний HTML-код в div:

private string BuildTab1MiddleCol()
{
   StringBuilder buttonStr = new StringBuilder();
   buttonStr.Append("<div class=\"w3-col s2a\">");
   buttonStr.Append("  <div class=\"w3-container\"> <p>");
   buttonStr.Append(" <input type=\"image\" id=\"soft_code\" runat=\"server\" src=\"./Images/checkmarkUnchecked.png\" onserverclick=\"btnTracking_OnClick\" />");
   buttonStr.Append(" </p> </div>");
   buttonStr.Append(" </div>");
   return buttonStr.ToString();
}


Когда я нажимаю на изображение, оно выполняет событие Page_Load, но не выполняет метод btnTracking_OnClick.

если я возьму строку и вставлю ее на саму страницу:
в <тип входного="изображение" идентификатор="закодировать" атрибут runat="сервер" СРЦ="./Изображения/checkmarkUnchecked.ПНГ" onserverclick="btnTracking_OnClick" /&ГТ;

срабатывает событие btnTracking_OnClick.

Что я упускаю из виду

Что я уже пробовал:

Обычная погоня за ответами вверх и вниз по сети.

2 Ответов

Рейтинг:
13

F-ES Sitecore

Атрибуты, такие как "runat", работают только тогда, когда они помещены на серверные элементы управления, то есть в вашу разметку, например "asp:Image", то, что вы делаете,-это рендеринг html с тегом runat, поэтому вы помещаете этот атрибут на клиентский элемент управления, но веб-браузер не знает, что с ним делать, поэтому игнорирует его.

Если вам нужны динамические серверные элементы управления, вы должны добавить их в объект контейнера в своем серверном коде. Гугл для "asp.net создайте динамический серверный элемент управления", и вы найдете множество примеров.


Рейтинг:
10

RmcbainTheThird

Ну, похоже, что единственный способ, которым я мог это сделать, - это использовать заполнитель и не писать в div внутренний html. Таким образом, метод теперь будет выглядеть следующим образом:

private void BuilTab1dMiddleCol(PlaceHolder  phHolder, int nhID)
        {
    string id = "nh_" + nhID;
    ImageButton imgBtncheckOff = new ImageButton {ID = id, ImageUrl = "./Images/checkmarkUnchecked.png"};
    imgBtncheckOff.Click+= new ImageClickEventHandler(btnTracking_OnClick);
     phHolder.Controls.Add(new LiteralControl("<div class=\"w3-col s2a\">"));
    phHolder.Controls.Add(new LiteralControl("<div id=\"div_chk \" class=\"w3-container\"> <p>"));
    phHolder.Controls.Add(imgBtncheckOff);
    phHolder.Controls.Add(new LiteralControl(" </p> </div>"));
    phHolder.Controls.Add(new LiteralControl("</div>"));
}