0

ASP.NET C# と MS SQL Server 2008 を使用した単純なアプリケーションがあります。すべての訪問ユーザーを自分のサイトに登録する必要があります。そのために、ユーザーはフォームに記入する必要があります。問題は、ユーザーが[Desired Username]フィールドに入力すると、別のユーザーが既にそのユーザー名を使用しているかどうかをバックグラウンドで確認できるはずだということです。可用性を確認するには、SQL 選択クエリを実行する必要があります。

現在、このTextBoxName_TextChanged方法を使用していますが、リアルタイムでは機能しません。ポストバックでのみ機能します。コードは次のとおりです。

protected void TextBox3_TextChanged(object sender, EventArgs e)
        {
            if (TextBox3.Text.Length == 0)
            {
                availability.Text = "";
                return;
            }

            SqlDataAdapter adp = new SqlDataAdapter("select username from users where username='" + TextBox3.Text + "'", con);
            DataSet ds = new DataSet();
            adp.Fill(ds, "users");
            if (ds.Tables["users"].Rows.Count > 0)
            {
                availability.ForeColor = System.Drawing.Color.Red;
                availability.Text = "Not Available";
            }
            else
            {
                availability.ForeColor = System.Drawing.Color.White;
                availability.Text = "Available";
            }

        }

Webで検索したのはASP.NETではなくPHPに関するものだけだったので、何か提案してください

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
</asp:UpdatePanel>
    <table cellpadding="5" class="style1"> 
        <tr>
            <td class="style3">
                <asp:Label ID="Label3" runat="server" Text="Username" ForeColor="White"></asp:Label>&nbsp;&nbsp; </td>
            <td style="border:0px none #FF0000;">
                <asp:TextBox ID="TextBox3" runat="server" Width="175px" 
                    CssClass="input-control" ForeColor="Black" ontextchanged="TextBox3_TextChanged" AutoPostBack="true"></asp:TextBox></td>
        </tr>
        <tr>
            <td class="style3"></td>
            <td style="border:0px none #FF0000;"> 

                <asp:Label ID="availability" runat="server" Width="175px" CssClass="text" Text="availability"></asp:Label></td>
        </tr>
        <tr>
            <td class="style3">
                <asp:Label ID="Label4" runat="server" Text="Password" ForeColor="White"></asp:Label>&nbsp;&nbsp;&nbsp; </td>
            <td style="border:0px none #FF0000;">
                <asp:TextBox ID="TextBox4" runat="server" Width="175px" TextMode="Password" CssClass="input-control" ForeColor="Black"></asp:TextBox></td>
        </tr>
        <tr>
            <td class="style3">
                <asp:Label ID="Label5" runat="server" Text="Email" ForeColor="White"></asp:Label>&nbsp;&nbsp;&nbsp; </td>
            <td style="border:0px none #FF0000;">
                <asp:TextBox ID="TextBox5" runat="server" Width="175px" CssClass="input-control" ForeColor="Black"></asp:TextBox></td>
        </tr>

        <tr>

            <td class="style3">

            <td style="width:30%; text-align: right; padding: 10px; border:none;">
                <div class="button-set" data-role="button-set">
                    <asp:Button ID="Button2" runat="server" class="active bg-color-red" Text="Sign Up" />
                </div>
        </tr>
        </table></asp:UpdatePanel>

アップデート:

みんなのコメントと回答に続いて、このスクリーンショットに示されている小さな問題でこれほど多くのことを達成しました:ステータスを持つ別のラベルがあり、 availability_statusスクリーンショットがそのままで ある理由がわかりません。助けてください。

4

5 に答える 5

2

あなたの更新パネルは適切にフォーマットされていないと思います。「可用性」ラベルを更新パネルに配置し、ユーザー名テキスト ボックスのトリガーを設定してから、イベント名を設定する必要があります。何かのようなもの :

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <ContentTemplate>
    <asp:Label ID="availability" AppendDataBoundItems="true" runat="server" >                                         
    </asp:Label>
  </ContentTemplate>
  <Triggers>
   <asp:AsyncPostBackTrigger ControlID="TextBox3" EventName="TextChanged" />
    </Triggers>
 </asp:UpdatePanel>

また、テキスト ボックスに AutoPostBack="True" を設定する必要があります。うまくいくと思います。

于 2013-01-12T09:48:59.657 に答える
1

AJAX 経由でリクエストを送信する必要があります。テキスト ボックスのクライアント側の「変更された」イベントに接続し、そこからトリガーします。最適なオプションは、jQuery を使用することです。

<script text="text/javascript">

$(document).ready(function() {
    var searchTimer;
    ...
    $('TextBox3').change(function() {
        var searchTerm = $(this).val();
        clearTimer(searchTimer);
        searchTimer = setTimeout(1000, function() {
            $.get('findUsers', { userName: searchTerm }, function(response) {
                // process successful response
            }).error(function(error) {
                // process error response
            });
        });
    });
});
<script>

<table>
    ...
    <input type="text" id="TextBox3" />
</table>

上記は、テキストが変更されるたびに 1 秒後に API 呼び出し「findUsers」へのリクエストを起動します。これは、ユーザーが入力を終了したときにのみ要求を送信する必要があるため、ユーザーが入力しているときに不要な要求を送信しないようにするためです。

于 2013-01-12T09:03:12.910 に答える
1

テキストボックスに AutoPostBack="true" がありますか? ページ全体の読み込みを防ぐために、テキストボックスの周りに UpdatePanel を追加する必要があります。

于 2013-01-12T09:03:22.003 に答える
0

最後に、私はそれを機能させました。興味を持って試してくれたすべての人に感謝します。解決策は、すべての OnkeyUp イベントで PostBack を作成することです。これは JS を使用して実行できます。

マークアップは

<asp:TextBox ID="TextBox3" runat="server" Width="175px" 
                    CssClass="input-control" ForeColor="Black" onkeyup="RefreshUpdatePanel();" ontextchanged="TextBox3_TextChanged" AutoPostBack="false"></asp:TextBox>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <ContentTemplate><asp:Label ID="availability" runat="server" Width="175px" CssClass="text" Text="availability_label"></asp:Label>
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="TextBox3" EventName="TextChanged" />
                    </Triggers>

Javascript は次のとおりです。

<script type="text/javascript">
      function RefreshUpdatePanel() {
          __doPostBack('<%= TextBox3.ClientID %>', '');
      };
</script>

そして、ユーザー名が存在するかどうかを確認するためのコードは、

TextBox3_TextChanged() メソッド。出来た。

于 2013-01-12T11:21:48.193 に答える
-2

私は最近この機能を作成しました。自分で試すことができます。

public bool IsExist(string name, string pass)  /// in your case you only need to save the textbox on a string variable
    {
        string sql = "select * from Users where UName='" + name + "' and Pass='" + pass + "'"; ; 
        DataSet ds = General.GetData(sql); // General class has function called GetData which obviouslly gets the data of the required SQL information.
        if (ds.Tables[0].Rows.Count > 0)
            return true;
        return false;
    }
于 2013-01-12T09:04:01.823 に答える