2011-10-27 9 views
3

私は次のマークアップがあります。これまでのASP.NET/VB.NET:Dropdownlist SelectedIndexChangedがonchange = "javascript:return true;"を発生させない

<asp:DropDownList ID="dd1" AutoPostBack="true" runat="server"> 
    <asp:ListItem Value="1">1</asp:ListItem> 
    <asp:ListItem Value="2">2</asp:ListItem> 
</asp:DropDownList> 
<asp:DropDownList ID="dd2" AutoPostBack="true" onchange="javascript:return true;" runat="server"> 
    <asp:ListItem Value="1">3</asp:ListItem> 
    <asp:ListItem Value="2">4</asp:ListItem> 
</asp:DropDownList> 

有線を:DD2のインデックスが変更された場合

Protected Sub changed1(sender As Object, e As EventArgs) Handles dd1.SelectedIndexChanged 

End Sub 

Protected Sub changed2(sender As Object, e As EventArgs) Handles dd2.SelectedIndexChanged 

End Sub 

、あなたは右、火災にそのハンドラを期待しますか?まあ、そうではありません。代わりに、dd1のハンドラがそのインデックスが変更されたときに起動された後に、 "キューに入れられ"、起動されます。もしあなたがonchange="javascript:return true;"をdd2から外したら、それはうまくいきます。

ここで何が起こっているのか分かりませんか?

編集:私の最初の答えは、ドロップダウンリストのリターン式を使用すると、ボタンのクリックイベントと同じようには動作しませんが、以前はドロップダウンリストでこれを行ったことを誓っています。

アップデート:私はJavaScriptでこれを行うことによって、発射するサーバーイベントを強制することができる午前:

__doPostBack("<%=dd2.ClientID %>", '');

私はこれをしなければならない理由を私は見ていないが、それは動作します。しかし、私はまだそれを他の方法でやりたいと思っています。誰かが知っていれば私に知らせてください。

答えて

2

、私はあなたがボタンのOnClickイベント(例えば、onclick="javascript:return false;")との可能性のようなクライアント側ののonchangeイベントにfalseを返すことで、ドロップダウンのサーバーイベントをキャンセルできると思っていました。

私がやったことは、関数の状態をチェックすることでした。 trueの場合、これは発生します。

__doPostBack( "<%= dd2.ClientID%>"、 '');

それ以外はそうではありません。

3

これはまったく必要ありません。 AutoPostBackをtrueに設定し、検証をエスケープする必要がある場合は、CausesValidationをfalseに設定します。何らかの理由で

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" CausesValidation="false" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" /> 
+0

私はバリデーションを使用していますか? – oscilatingcretin

+0

バリデーションを使用しているのですか?ページにバリデータがあるが、DropDownListがバリデーションをトリガしないようにするには、 'CausesValidation'をfalseに設定します。それ以外の場合は、 'AutoPostBack'をtrueに設定して、すべて正常です。 –

+0

私の例は、私が既にAutoPostBack = "true"を持っていることを示しています。私はまた、検証で何もしていません。私は、trueまたはfalseを返すかどうかによって、サーバーサイドのイベントが発生しないようにしたいだけです。 – oscilatingcretin

1
<asp:DropDownList ID="page_size" runat="server" **AutoPostBack="true"** OnSelectedIndexChanged="page_size_SelectedIndexChanged"> 
          </asp:DropDownList> 

Autopostback="trueを追加してください。

0

__doPostBack( "<%= dd2.ClientID%>"、 '');

これは私のために働いた...

が、これはダウン私のドロップだった.........ここ

は私のjqueryの関数は(

機能CheckDateです){

var date = document.getElementById('<%= ucDateTimeStart.FindControl("txtDateTime").ClientID %>').value; 
    if (date == '') { 
     alert("Please select a valid date."); 
     return false; 

    } 
    else { 
     __doPostBack("<%=ddlbranchname.ClientID %>", ''); 
     return true; 
    } 


    return true; 

} 
0
this is my drop down.. 
<asp:DropDownList ID="ddlbranchname" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlBranchChanged" 
        onchange="return CheckDate();" CausesValidation="false" CssClass="dropdown"> 
       </asp:DropDownList> 
関連する問題