
環境
ASP.NET
WebForms
VB.NET
VisualStudio2017
画面構成
検索条件用 RadioButton
検索 Button
検索結果表示用 GridView
GridView用 UpdatePanel
GridView用 SqlDataSource
GridViewの中の要素として
検索結果ID Label
カート追加用 LinkButton
設定
UpdatePanelはUpdateModeがConditionalでtriggerはAsyncPostBack:検索Button.Click
GridView内カート追加用LinkButtonのCommandArgumentに<%# Eval("ID") %>
ソース
デザイン側
ASP.NET
1<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" CodeBehind="test.aspx.vb" Inherits="TEST.mailgo" %> 2<asp:Content ID="Content" ContentPlaceHolderID="body" runat="server"> 3 <div style="position: absolute; width: 210px; height: 300px; top: 0px;" id="divMenu"> 4 <asp:RadioButtonList ID="RadioButtonList1" runat="server"> 5 <asp:ListItem Selected="True" Value="0">条件A</asp:ListItem> 6 <asp:ListItem Value="1">条件B</asp:ListItem> 7 </asp:RadioButtonList> 8 <asp:Button ID="Button1" runat="server" Text="検索" Height="35px" Width="86px" /> 9 <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 10 <ContentTemplate> 11 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> 12 <Columns> 13 <asp:TemplateField HeaderText="ID"> 14 <EditItemTemplate> 15 <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 16 </EditItemTemplate> 17 <ItemTemplate> 18 <asp:Label ID="Label1" runat="server" Text='<%# Eval("ID") %>'></asp:Label> 19 </ItemTemplate> 20 </asp:TemplateField> 21 <asp:TemplateField HeaderText="カート追加"> 22 <EditItemTemplate> 23 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 24 </EditItemTemplate> 25 <ItemTemplate> 26 <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%# Eval("ID") %>' OnClick="カート追加LinkButton_Click">LinkButton</asp:LinkButton> 27 </ItemTemplate> 28 </asp:TemplateField> 29 </Columns> 30 </asp:GridView> 31 </ContentTemplate> 32 <Triggers> 33 <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click"> 34 </asp:AsyncPostBackTrigger> 35 </Triggers> 36 </asp:UpdatePanel> 37 38 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="DB接続文" 39 SelectCommand="SELECT ID FROM T_TABLE WHERE KBN = @KBN" CancelSelectOnNullParameter="False"> 40 <SelectParameters> 41 <asp:ControlParameter ControlID="RadioButtonList1" Name="ID" PropertyName="SelectedValue" /> 42 </SelectParameters> 43 </asp:SqlDataSource> 44 </div> 45</asp:Content>
コード側
VB
1Protected Sub カート追加LinkButton_Click(sender As Object, e As EventArgs) 2 '選択された行のIDのはずがRadioButton切り替え時に押下した場合は切り替えた後に検索された結果のIDに変わってしまう 3 Dim selectedID As String = CType(sender, LinkButton).CommandArgument 4 5 'DB追加処理 6End Sub
問題と期待動作
用意されているデータ
ID,KBN
1,0
2,0
3,0
4,1
5,1
6,1
検索条件Aで検索するとGridViewにはID1,2,3の行が表示される。
検索条件Bで検索するとGridViewにはID4,5,6の行が表示される。
- 検索条件用 RadioButtonを条件Aに設定する。
- 検索ボタンを押下する
- 検索条件用 RadioButtonを条件Bに設定する。
- GridView内のID2の行のカート追加用 LinkButtonを押下する
期待:ID2が取得できる。
現象:ID5が取得される。
3の時にPostBackが発生してない・画面の更新がされていないにも関わらず、4のLinkButton.Clickで取得できるIDが3で検索した時に取れるIDになってしまいます。
RadioButtonのAutoPostBackも切っている・UpdatePanelのtriggerも検索ボタンに設定しているのに何故検索条件Bでとれた場合のIDが取得されてしまうのでしょうか
GridView内のLinkButtonで再検索を行わない様にしたいのですがどの様にすればよろしいでしょうか。
御教授お願いいたします。
頂いたコードでの結果
画面表示後に条件Aでの検索を行った状態
①条件Bを選択する
②カート追加ボタンを押下する
正しく条件AでのValueが取得できるがGridViewが条件Bで更新されて表示されてしまう










回答2件
あなたの回答
tips
プレビュー