2

ボタンをクリックすると、ドロップダウンの値を取得したいのですが、何らかの理由でコードに入ると、エラー「Exdd」が現在のコンテキストに存在しませんで失敗します。ExTypeDDはドロップダウンとしてリストビューにあり、そこから値を取得しようとしています。サーバー側はこのコードを生成しており、私のブラウザーではありません。

$('.Updt')
 .click(function() {

            var parent = $(this).parent().prev();

            var TypeNode = parent.children("#<%=Exdd.ClientID %>").first();


 <asp:ListView runat="server" id="ListView1" >
        <LayoutTemplate>
            <table id="tablesorter" style="border:solid 1px black;width:55%;">
                <thead>
                    <tr>
                        <th>
                            <a href="#">Address</a>
                         </th>                                                                                                            
                    </tr>
                </thead>
                <tbody>
                    <tr id="itemPlaceholder" runat="server" />
                </tbody>
                <tfoot>
                </tfoot>
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td>
                &nbsp;&nbsp;<select id="Exdd"
                             class="Nbr1" style="width: 90px" >
                            <option value=""><%# Eval("Type")%></option>
                            <option value="0">Home</option></select>
                </td>
    <td>
              <input type="button" id="btn_update" class="Updt" value="Update" />
    </td>
             </tr>
        </ItemTemplate>
    </asp:ListView>
4

2 に答える 2

1

あなたはListViewにいます。あなたはExTypeDDあなたが行を持っているのと同じくらい持っています。ExTypeDDそのため、アイテムテンプレートの外部で正常に参照することはできません(複数あります)

試してみてください(それをでまとめた後$(document).ready

$('.Updt')
 .click(function() {
            var tr = $(this).closest('tr');

            var TypeNode = tr.find("select.Nbr1").first();
         //...
        });
于 2013-02-07T21:08:06.073 に答える
0

これは、サーバー側のコントロールとしてサーバー側のHTML要素にアクセスしようとしているためです。select次のように要素を追加するだけで、要素をサーバー側のコントロールにすることができますrunat="server"

<select id="ExTypeDD" runat="server" class="Nbr1" style="width:90px">

ただし、その後も、このコントロールはサーバー側でアクセス可能ですが、ListViewのItemTemplateで動的に作成され、新しく作成されたものごとに一意のID値を生成するため、ExTypeDDのIDがないという問題が発生します。コントロール 。これを確認するには、ブラウザでレンダリングされたページでソースを表示し、select要素でID値を確認します。

サーバー側で実行しようとしていることを実行するには、次のように実行する必要があります。

onItemCreatedイベントハンドラーをListViewに追加します。

<asp:ListView runat="server" id="ListView1" onItemCreated="ListView1ItemCreated">

これを置き換えます:

<input type="button" id="btn_update" class="Updt" value="Update" />

これとともに:

<asp:button id="btn_update" text="Update" runat="server" />

イベントハンドラーをコードビハインドに追加します。

protected void ListView1ItemCreated(object sender, ListViewItemEventArgs e){
   var myselect = (HtmlSelect)e.Item.FindControl("ExTypeDD");
   var mybutton = (Button)e.Item.FindControl("btn_update");
   mybutton.OnSubmit += (o,e) => {  
      // do something with myselect selected value
      var selectedvalue = myselect.Value;
   };
}

注:上記のコードはテストされておらず、おそらくコンパイルされません。必要な修正を行う必要がありますが、問題を解決する方法のアイデアが得られるはずです。それが役に立てば幸い。

于 2013-02-07T21:21:33.890 に答える