0

最初のボタンをクリックすると最初のパネルが表示され、2番目のパネルが非表示になり、2番目のボタンをクリックすると2番目のパネルで同じことが起こります。それは正常に機能しており、それについては問題ありません。

問題は、エラー メッセージの印刷を担当する別の更新パネルがある 2 番目のパネルから始まります。入力の長さをチェックするだけのメッセージは正常に機能していますが、ID の有効性をチェックするためにデータベースにクエリを実行するメッセージは出力されません。

クエリが問題だと思ったので、更新パネルなしで別のページで試してみましたが、問題なく動作しています。問題は更新パネルのどこかにあります。そして、私は本当にどこにあるのか理解できません。お役に立てれば幸いです。

これはフロント エンド コードです (意味のない詳細は省略します)。

<asp:Button ID="Button1" runat="server" Text="[Input your Id?]"  />
<asp:Button ID="Button2" runat="server" Text="[Aditional info]"  />
  .....
 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <ContentTemplate>
 < asp:Panel ID="Panel1" runat="server">
 some code here

 </asp:Panel>

 <asp:Panel ID="Panel2" runat="server">

<b>*ID Number:&nbsp;&nbsp;</b> 
<asp:TextBox ID="IdNo" runat="server" ></asp:TextBox><font size='2'>
  <asp:RegularExpressionValidator ID="RegularExpressionValidator1" class="errorMess" ErrorMessage="Letters are not Allowed!!" ControlToValidate="IdNumb" ValidationExpression="\d+"
    runat="server" />
    <asp:UpdatePanel ID="UpdatePanel3" runat="server">
   <ContentTemplate>
   <asp:Label ID="errorEm"  class="errorMess" runat="server" Text="Please fill in the required fields"></asp:Label>
   <asp:Label ID="errorLenght"  class="errorMess" runat="server" Text="Id is too long!!!"></asp:Label>
   <asp:Label ID="errorUser"  class="errorMess" runat="server" Text="Id is not valid!!!"></asp:Label>
   </ContentTemplate>
   <Triggers>
   <asp:AsyncPostBackTrigger ControlID="Button5" EventName="Click" />
   </Triggers>
   </asp:UpdatePanel> 
   <asp:Button ID="Button5" runat="server" Text="Generate" /></td></tr>

   </asp:Panel>
    </ContentTemplate>
    <Triggers>
   <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
   </Triggers>
   </asp:UpdatePanel>

これはバックエンドの VB コードです。

 Protected Sub Button5_Click(ByVal sender As Object, ByVal e As EventArgs) Handles  Button5.Click
If IdNo.Text = "" Then
    Panel1.Visible = False
    Panel2.Visible = True
    errorEm.Visible = True
ElseIf IdNo.Text.Length > 9 Then
    Panel1.Visible = False
    Panel2.Visible = True
    errorLenght.Visible = True
Else

    Try 'everything that comes here does not work'
        myconn.Open()
        Dim stquery As String = "SELECT * from account WHERE user_id= @id"
        Dim smd = New MySqlCommand(stquery, myconn)
        smd.Parameters.AddWithValue("@id", Convert.ToInt32(IdNo.Text))
        Dim myreader = smd.ExecuteReader()
        If Not myreader.HasRows Then
            Panel1.Visible = False
            Panel2.Visible = True
            errorUser.Visible = True
            myconn.Close()
            Return
        Else

            Panel1.Visible = False
            Panel2.Visible = True
            myreader.Read()
            Dim ErrorMessage As String = "alert('User has been found');"
            Page.ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", ErrorMessage, True)


            myconn.Close()
        End If
        myconn.Close()
    Catch ex As Exception
        Dim ErrorMessage As String = "alert('" & ex.Message.ToString() & "');"
        Page.ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", ErrorMessage, True)
        myconn.Close()
    End Try
End If
End Sub
4

1 に答える 1

0

更新パネル内からスクリプトを実行したい場合 - 使用しないでください

Page.ClientScript.RegisterStartupScript

使用する

ClientScriptManager.RegisterStartupScript

代わりは。

参照: http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerstartupscript.aspx

于 2013-05-06T16:12:34.813 に答える