Я работаю над приложением Web Forms, и у меня есть код HTML, который мне нужен еще в 2-3 местах.
Я создал ASCX-контроль, как так, который представляет собой повторяющийся код:PartialView в веб-формах
protected override void Render(HtmlTextWriter writer)
{
StringBuilder str = new StringBuilder();
while (connRef.Read())
{
str.Append(connRef["some_database_field"]);
}
writer.Write(str.ToString());
base.Render(writer);
}
connRef является ссылкой на объект DataReader, что я прохожу, где мне нужен этот кусок кода, чтобы сделать.
В другом элементе управления, я использую следующий код:
MSSqlConn s = new MSSqlConn();
StringBuilder str = new StringBuilder();
s.OpenConn("select * from notes order by note_date desc;");
notes.note c = (notes.note)Page.LoadControl(@"/controls/notes/note.ascx");
c.ID = "note";
c.connRef = s;
while (s.Read())
{
str.Append(Html.RenderControl(c));
}
s.CloseConn();
Response.Write(str.ToString());
MSSqlConn это мой класс для подключения к базе данных.
RenderControl предоставляет любой элемент управления в виде строки HTML.
s во втором фрагменте кода возвращает только одну запись вместо двух. По какой-то причине s закрывается, если передать ссылку на другой элемент управления (c.connRef = s).
Возможно, я что-то упустил, я не знаю.
Прошу прощения, если я не объяснил это хорошо.
Ваше право. Я сосредоточился на функциональности, которую забыл, что на самом деле я прочитал Read внутри другого Read. – lopkiju