Как остановить загрузку страницы при нажатии на кнопку ссылки в asp: listview - PullRequest
0 голосов
/ 22 ноября 2011

Windows 7, визуальный веб-разработчик, экспресс 2010, c #, asp.net, веб-формы. Запуск программы ctrl-F5 с vwd.

Использование вкладок с asp: listview на каждой вкладке. У меня есть код позади элементов в каждом списке. Код позади использует идентификатор (из элемента) для извлечения записи из базы данных (файл mdf) через xsd. заполнить текстовые поля на странице.

Когда я нажимаю на элемент, программа правильно захватывает правильную запись и правильно помещает информацию из этой записи в текстовые поля на экране. Проблема в том, что она либо обновляет, либо перезагружает страницу ... что заставляет ее переходить на первую вкладку вместо вкладки, на которой я нахожусь. Я предполагаю, что это будет смущающим и неожиданным для пользователя (это смущает и неожиданным для меня).

Вот как я работаю с кодом для щелчка элемента в просмотре списка:

    protected void lv_PBP_click(object sender, ListViewCommandEventArgs e)
    {
        if (!e.CommandName.Equals("Sort"))
        {
            int searchID = Convert.ToInt32(e.CommandArgument.ToString());
            TableAdapters.PBPTableAdapter pbpAdapt =
                new TableAdapters.PBPTableAdapter();
            PBPDataTable tbl = pbpAdapt.GetData(searchID);
            tbMessage.Text = tbl.Rows[0]["pMessage"].ToString();
            lbField2.Text = tbl.Rows[0]["pField2"].ToString();
            lbField3.Text = tbl.Rows[0]["pField3"].ToString();
        }
    }

Вот как определяется список:

    <div class="tab-content" style="width:1000px;">
           <h1 class="tab" title="title1">title1</h1>
           <asp:ListView runat= "server"   ID="somid" DataSourceID="ads" OnItemCommand="lv_PBP_click">
              <LayoutTemplate>
                <table  id="table1"  style="background-color:White;border-collapse:collapse;" width="100%">      
                <tr>                  
                    <td width="75%">    <asp:Button runat="server" ID="SortButton" 
                     Text="msg" CommandName="Sort" CommandArgument="pMessage" /></td>
                     <td>    <asp:Button runat="server" ID="LinkButton1" 
                     Text="F2 CommandName="Sort" CommandArgument="pField2" /> </td>
                    <td>    <asp:Button runat="server" ID="SortF3" 
                     Text="F3" CommandName="Sort" CommandArgument="pField3" /></td>
                  </tr>
                  <tr runat="server" id="itemPlaceholder" style="background-color:White" >
                  </tr> 
                </table>
                <asp:DataPager runat="server" ID="idxxx" PageSize="10" style="background-color:White">
                    <Fields> 
                      <asp:TemplatePagerField>              
                        <PagerTemplate>
                        <b>
                        Page
                        <asp:Label runat="server" ID="CurrentPageLabel" 
                          Text="<%# Container.TotalRowCount>0 ? (Container.StartRowIndex / Container.PageSize) + 1 : 0 %>" />
                        of
                        <asp:Label runat="server" ID="TotalPagesLabel" 
                          Text="<%# Math.Ceiling ((double)Container.TotalRowCount / Container.PageSize) %>" />
                        (
                        <asp:Label runat="server" ID="TotalItemsLabel" 
                          Text="<%# Container.TotalRowCount%>" />
                        records)
                        <br />
                        </b>
                        </PagerTemplate>
                      </asp:TemplatePagerField>

                      <asp:NextPreviousPagerField
                        ButtonType="Button"
                        ShowFirstPageButton="true"
                        ShowNextPageButton="false"
                        ShowPreviousPageButton="false" />

                      <asp:NumericPagerField 
                        PreviousPageText="&lt; Prev 10"
                        NextPageText="Next 10 &gt;"
                        ButtonCount="10" />

                      <asp:NextPreviousPagerField
                        ButtonType="Button"
                        ShowLastPageButton="true"
                        ShowNextPageButton="false"
                        ShowPreviousPageButton="false" />

                    </Fields>
                </asp:DataPager>
              </LayoutTemplate>
                <ItemTemplate>
                <tr id="Tr1" runat="server" style="background-color:#ECE5B6;" >
                    <td><asp:LinkButton runat="server" ID="ms1"   Text='<%# Eval("pMessage")%>'  CommandArgument='<%# Eval("pID") %>' /></td>
                    <td><asp:Label runat="server" ID="Label1"  Text='<%# Eval("pField2")%>'  /></td>
                    <td><asp:Label runat="server" ID="Status"  Text='<%# Eval("pSField3")%>' /></td>
                </tr>
                </ItemTemplate>
                <AlternatingItemTemplate>
                <tr id="Tr1" runat="server" style="background-color:#FAF8CC;" >
                    <td><asp:LinkButton runat="server" ID="ms2"   Text='<%# Eval("pMessage")%>'  CommandArgument='<%# Eval("pID") %>' /></td>
                    <td><asp:Label runat="server" ID="Label1"  Text='<%# Eval("pField2")%>'  /></td>
                    <td><asp:Label runat="server" ID="yyy"  Text='<%# Eval("pField3")%>' /></td>
                </tr>

                </AlternatingItemTemplate>

            </asp:ListView>
   </div>

Кнопки LinkButton в нижней части кода соответствуют элементам в списке, которые вызывают код, указанный в первом фрагменте выше. Я думаю, что мне не хватает чего-то фундаментального в том, что делают кнопки. Возможно кнопки (или кнопки ссылок) всегда обновляют страницу (кажется маловероятным). В любом случае, я хочу остановить перезагрузку страницы ... как?

OTOH, может быть, есть какая-то причина, по которой я не должен останавливать перезагрузку этой страницы ... может быть, дизайнеры хотят такого поведения. В таком случае, что мне делать? Я вынужден в ajax или есть другой способ сделать это? (Просто измените содержимое некоторых окон сообщений, не обновляя страницу ... или не обновляя ее до того же состояния, в котором она была оставлена, чтобы она не выглядела так, как будто она была обновлена.)

1 Ответ

4 голосов
/ 22 ноября 2011

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

Если вы хотите, чтобы страница взаимодействовала с сервером без обратной передачи, вам необходимо использовать AJAX..

...