Не удалось увидеть мой элемент управления linkbutton внутри элемента <td>
Пожалуйста, проверьте код ниже, где я могу динамически генерировать таблицу из базы данных. Но не может отобразить кнопку ссылки внутри <td>
элемент.
Основная функция заключается в создании нового <tr>
для каждой строки в таблице базы данных с добавленной кнопкой ссылки.
Код aspx
<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 находится в цикле и поэтому возвращает 1 строку за раз. Вы можете скопировать свой метод 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;
}
Удачи. попробуйте увидеть человека....