PartialView в веб-формах - PullRequest
       9

PartialView в веб-формах

0 голосов
/ 07 апреля 2009

Я работаю над приложением 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).

Может быть, я что-то упустил, я не знаю.

Извините, если бы я не объяснил это хорошо.

1 Ответ

2 голосов
/ 07 апреля 2009

Ваша проблема в том, что вы вызываете метод Read () дважды. Вот что в основном делает ваш код:

        while (s.Read())
        {
             while (connRef.Read())
             {
                 str.Append(connRef["some_database_field"]);
             }

        }

Каждый вызов метода Read () увеличивает скорость чтения данных на одну запись. Вам нужно вынуть одну из петель.

Следует также отметить, что если вы передаете этот считыватель данных нескольким пользовательским элементам управления, вам потребуется сбросить его для начала с начала для каждого нового пользовательского элемента управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...