2016-07-07 10 views
0

背景:C#のコードは、ASP .NETで別の関数の完了時に差し出がましい機能にジャンプ

私は、ユーザーがID番号を提出することができ、私のWebページ内の場所を持っています。テキストボックスにIDを入力するか、ドロップダウンリストから頻繁に使用するIDを選択することができます。これらの2つの入力元は本質的に同じことをするので、私は両方に対して同じコールバック関数を使用します。この関数では、送信者がテキストボックスかドロップダウンか(および適切な検証チェック)を確認するチェックがあります。

問題:

私は、この関数からいくつかの非常に奇妙な行動を取得しています。この関数が呼び出され、送信者がドロップダウンリストである場合、すべてが想定どおりに機能します。ただし、この関数が呼び出され、送信者がテキストボックスの場合、関数を終了するまですべてが正常に表示されます。関数が終了すると、コントロールはすぐに、その関数内のどこでも呼び出さなかった別の無関係な関数にジャンプします。それは私がそれをテストし、デバッガでWeb上の両方のジャンプになります。常に同じ関数にジャンプします。この関数自体は、ページ上の他の場所(ユーザーが明示的にボタンを押したときにのみ呼び出される)のプッシュボタンのコールバック関数です。

私はこれをやっている理由が分からず、何がうまくいかないのか分からない。

関連するコード

注:それが重要ならば、両方のテキストボックスやドロップダウンリストには、GridViewののEditItemTemplateです。

<asp:TextBox ID="TextBoxCQ" runat="server" BackColor="#ffcccc" Text="Enter CQ here" onclick="$(this).val('');" OnTextChanged="cq_Selected_In_Edit"></asp:TextBox> 
<asp:DropDownList ID="AssociatedCQList" runat="server" BackColor="#ffcccc" AppendDataBoundItems="True" Font-Size="Smaller" AutoPostBack="True" DataSourceID="SqlDataSource_CQList" DataTextField="cqdetail" DataValueField="cqID" OnSelectedIndexChanged="cq_Selected_In_Edit"> 
        <asp:ListItem Selected="True" Enabled="true" Value="Select from list of CQ's">Select from list of CQ's </asp:ListItem> 
       </asp:DropDownList> 

背後にあるコード:

protected void cq_Selected_In_Edit(object sender, EventArgs e) 
    { 
     object type = sender.GetType(); 
     string name = ((System.Reflection.MemberInfo)(type)).Name; 
     bool isTextbox = (name == "TextBox"); // to be used throughout the function 
     GridViewRow Row; 
     string text; 
     if (isTextbox) // it's the textbox calling 
     { 
      Row = (GridViewRow)((System.Web.UI.WebControls.TextBox)(sender)).NamingContainer; 
      text = ((System.Web.UI.WebControls.TextBox)(sender)).Text; 
     } 
     else // it's the dropdown calling 
     { 
      Row = (GridViewRow)((System.Web.UI.WebControls.DropDownList)(sender)).NamingContainer; 
      text = ((System.Web.UI.WebControls.ListControl)(sender)).Text; 
     } 
     // do more processing, etc etc 
    } 
+0

を私たちは、関連するコードを見ることなく、あなたを助けることができない、質問を編集してください。 – Esko

+0

ページにはいくつのボタンがあり、どのようにテキストボックスコールバックがトリガーされていますか? –

+0

[How To:TextBox Webサーバーコントロールの変更に対応](https://msdn.microsoft.com/en-us/library/2589b44c(v = vs.110).aspx) - 「既定では、 TextChangedイベントでWebフォームページがサーバーに直接ポストされるのではなく、次回フォームがポストされたときにイベントがサーバーコードで生成されます」「観察すると、コードはテキストボックスでAutoPostbackを使用しません*何か他の*がフォームを投稿させていることを意味するコントロール。私はそのボタンが呼び出されているかどうか(あなたが意図したかどうかにかかわらず)です。 –

答えて

0

は、これがの原因であることはまだ分かりませんが、テキストボックスにはボタンを押したいという親和性があるようです。

パネルにテキストボックスを配置し、パネルにコードビハインド機能を呼び出す非表示のボタンを押してしまう問題を修正しました(もちろん、コードの後ろにも少し修正が必要でした)。簡単な実装を以下に示します。

<asp:Panel runat="server" DefaultButton="btnSearch"> 
    <asp:TextBox id="txtSearch" runat="server" /> 
    <asp:Button id="btnSearch" runat="server" text="Start search" /> 
</asp:Panel> 

コード出典:How can I fire a Button Click event when Enter Key is pressed based on what textbox has focus?

1

制御のIDTextBoxQCであり、あなたが正しいオブジェクトを見つけるためにTextBoxに対することを比較しています。 2つの文字列が等しくないため、これはfalseに評価されます。

あなたが全体のコードを使用したいと関数は、文字列をテキストTextBoxが含まれていることを確認しているとおり、

bool isTextbox = (name.Contains("TextBox")); 

に変更します。

+0

これは正しくない、私のboolは正しく評価します。私はコントロールのIDを取得していない、呼び出し元のコントロールの名前を取得しています(つまり、実際には何か)。 –

関連する問題