Я работаю над приложением Web Forms, и у меня есть немного кода HTML, который мне нужен, еще в 2-3 местах.
Я создал элемент управления .ascx, который представляет повторяющийся код:
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).
Может быть, я что-то упустил, я не знаю.
Извините, если бы я не объяснил это хорошо.