Не могу увидеть свой элемент управления linkbutton внутри элемента <td>

StackOverflow https://stackoverflow.com//questions/20040338

Вопрос

Пожалуйста, проверьте приведенный ниже код, где я могу динамически генерировать таблицу из базы данных.Но не удалось отобразить кнопку ссылки внутри <td> элемент.

Основная функция – создание нового <tr> для каждой строки в таблице базы данных с добавленной кнопкой ссылки.

Аскс-код

<div style="width: 80%;" id="div_post" runat="server">
</div>

Код Aspx.cs

protected void GetvicharData()
{
    try
    {
        Data_display dd = new Data_display();
        DataTable dt = dd.disp_vichar();
        string in_html = string.Empty;
        int i = 0;
        in_html = "<table style=\"width: 100%;\">";
        foreach (DataRow dr in dt.Rows)
        {
        string str_build = string.Empty;
        i = i + 1;
        string lbDate = Convert.ToDateTime(dr["Date"]).ToString("dd-MMM-yy");
        string lbTopic = dr["Topic_Name"].ToString();
        string desc = dr["Description"].ToString();
        string imgURL = dr["img_url"].ToString();
        string textUrl = dr["txt_url"].ToString();
        str_build = ret_string(lbDate, lbTopic, desc, imgURL, textUrl, i);
        in_html += str_build;
        }
        in_html += "</table>";
        div_post.InnerHtml = in_html;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

public string ret_string(string lbldate, string lbltopic, string description, string imgurl, string texturl, int i)
{
    try
    {
        StringBuilder sb = new StringBuilder();

        sb.Append("<tr><td class=\"post_date\" valign=\"top\" align=\"center\">");
        sb.Append("<asp:Label ID=\"lblDate\" runat=\"server\">" + lbldate + "</asp:Label>");
        sb.Append("</td><td class=\"post_topic\" valign=\"top\" >");
        sb.Append(" <asp:Label ID=\"lblTopic" + i + "\" runat=\"server\">" + lbltopic + "</asp:Label>");
        sb.Append("</td></tr><tr>");
        sb.Append("<td class=\"ShowPic\" valign=\"top\" align=\"right\" ><img src=\"" + imgurl + "\" alt=\"\" id=\"img_post\" /></td>");
        sb.Append("<td class=\"ShowPost\" valign=\"top\" style=\"text-align: justify\">");
        sb.Append("<asp:Panel ID=\"pnlDesc" + i + "\" runat=\"server\"><p>" + description + "</p>");
        sb.Append("</asp:Panel>");
        sb.Append("<div><asp:LinkButton ID=\"lnkbtn" + i + "\" runat=\"server\" Text=\"Read more...\" onclick=\"lnkbtn1_Click\" OnClientClick=\"openNewWin('" + texturl + "')\" />");
        sb.Append("</asp:LinkButton></div></td></tr>");
        string sbuild = sb.ToString();
        return sbuild;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

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

Это было полезно?

Решение 3

Я получил ответ.Пожалуйста, проверьте код.

sb.Append("<a href=\"#\" onclick=\"openNewWin('" + texturl + "')\" >Read More...</a>");

Другие советы

ОК, не проверял, но

sb.Append("</asp:LinkButton></div></td></tr>");

Где открытие для последнего </tr> ?.Мне кажется, его не хватает.

пытаться sb.Append("</asp:LinkButton></div></td>"); вместо

Также, если он сохраняется, попробуйте удалить последний и поместить его в <tr><td> вместо.Также следует иметь в виду одну вещь.Ваш метод ret_string находится в цикле и поэтому возвращает по одной строке за раз.Вы можете скопировать свой метод ret_string на страницу asp.net и удалить кодировки C#, протестировать и посмотреть, вернулась ли успешная строка.Удачи.

Обновить также

OnClientClick=\"openNewWin('" + texturl + "')\" />");

можешь попробовать OnClientClick=\"openNewWin('" + texturl + "')\" >"); вместо этого, поскольку я заметил, что вы уже закрыли кнопку ссылки в следующей строке.Так что попробуй удалить /> и посмотреть, что произошло?

Извини чувак.Только сейчас, когда я снова вижу ваш код, он выглядит странно.Мне пришлось дать другой ответ, потому что у меня нет здесь никаких средств тестирования.Как я уже упоминал в своем предыдущем ответе, ваш метод ret_string находится в цикле.Поэтому ваш str_build должен содержать строку ++ или одну строку в каждом экземпляре цикла.Когда ты делаешь вот так..

foreach (DataRow dr in dt.Rows)
        {
        string str_build = string.Empty;
        .................
        str_build = ret_string(lbDate, lbTopic, desc, imgURL, textUrl, i);
        in_html += str_build;
        }

Первый str_build; держите один ряд в первом проходе.Однако, когда наступает следующий раунд, вы устанавливаете string str_build = string.Empty; , это автоматически очищает каждую строку str_build;держится, если я понимаю ваш код.Я не уверен, как вы возвращаете свои строки, но я предложил вам убрать

string str_build = string.Empty;

и поместите его перед циклом, как показано ниже

 string str_build = string.Empty;
foreach (DataRow dr in dt.Rows)
{

        .................
        str_build = ret_string(lbDate, lbTopic, desc, imgURL, textUrl, i);
        in_html += str_build;
}

Удачи .попробуй увидеть чувака....

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top