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在item模板之外成功引用(不止一个)

您可以尝试(将其包装在 a 中之后$(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">

但是在那之后你仍然会遇到这个问题,虽然这个控件现在可以在服务器端访问,但它没有 ExTypeDD 的 id,因为它是在 ListView 的 ItemTemplate 中动态创建的,它为每个新创建的生成一个唯一的 ID 值控制 。您可以通过查看浏览器中呈现的页面上的源代码并检查选择元素上的 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 回答