SelectedIndexChanged未触发

时间:2014-08-08 14:11:49

标签: asp.net ajax vb.net listview selectedindexchanged

我遇到更新文本框的下拉列表问题,这些文本框都保存在列表视图中,更新面板中又是项目模板。

更新

我在相同的项目中使用相同的代码而没有上述容器,但是在将它与lisview和其他容器链接时却遇到了问题。

我不确定问题出在哪里,onClick不会被解雇,除非回调到服务器,无论下拉列表是否包含在上述容器中。

非常感谢任何帮助,提前谢谢。

使用asp(1st)和VB代码(第二个)。

<InsertItemTemplate>
<asp:panel runat="server" ChildrenAsTriggers="true" UpdateMode="Always">
<asp:ListView ID="ListView1" runat="server" InsertItemPosition="FirstItem" IAllowPaging="True" EnableViewState="true">
<tr>
<td>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Details")%>' TextMode="MultiLine" />
</td>
<td>
<asp:DropDownList ID="DLL" runat="server" OnSelectedIndexChanged="DLL_SelectedIndexChanged" AutoPostBack="true "EnableViewState="true">
    <asp:ListItem>Select</asp:ListItem>
    <asp:ListItem Value="1">Yes</asp:ListItem>
    <asp:ListItem Value="2">No</asp:ListItem>
    <asp:ListItem Value="3">Maybe</asp:ListItem>
    <asp:ListItem Value="4">I dont know</asp:ListItem>
    <asp:ListItem Value="5">Can you repeat</asp:ListItem>
    <asp:ListItem Value="6">the question</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
</asp:panel>
</InsertItemTemplate>

背后的代码

    Protected Sub DDL_SelectedIndexChanged(sender As Object, e As EventArgs)

    Dim ddl As DropDownList = DirectCast(sender, DropDownList) 
    Dim listviewItemThing = DirectCast(sender.parent.NamingContainer, ListViewItem) 
    Dim tb As TextBox = DirectCast(ddl.NamingContainer.FindControl("TextBox2"), TextBox)

    If ddl.SelectedValue = 1 Then
        tb.Text = My.Computer.FileSystem.ReadAllText("E:\Users\han\Documents\Templates\1.txt")
    ElseIf ddl.SelectedValue = 2 Then
        tb.Text = My.Computer.FileSystem.ReadAllText("E:\Users\han\Documents\Templates\2.txt")
    ElseIf ddl.SelectedValue = 3 Then
        tb.Text = My.Computer.FileSystem.ReadAllText("E:\Users\han\Documents\Templates\3.txt")
    ElseIf ddl.SelectedValue = 4 Then
        tb.Text = My.Computer.FileSystem.ReadAllText("E:\Users\han\Documents\Templates\4.txt")
    ElseIf ddl.SelectedValue = 5 Then
        tb.Text = My.Computer.FileSystem.ReadAllText("E:\Users\han\Documents\Templates\5.txt")
    ElseIf ddl.SelectedValue = 6 Then
        tb.Text = My.Computer.FileSystem.ReadAllText("E:\Users\han\Documents\Templates\6.txt")
    Else
        tb.Text = ""
    End If
End Sub

更新2

根据要求,请参阅VS2013上调试中浏览器控制台错误的附加屏幕截图

enter image description here

并扩大了错误。 enter image description here

更新3

添加了JQuery以尝试强制PostBack。

         function JsFunction() {
         __doPostBack('DLL_SelectedIndexChanged', '');
     }

ASP链接到JQ

<asp:DropDownList ID="DDL" runat="server" Width="120px" OnSelectedIndexChanged="DDL_SelectedIndexChanged" AutoPostBack="true" CausesValidation="false" EnableViewState="true" onchange="javascript:JsFunction()">

3 个答案:

答案 0 :(得分:1)

您的下拉列表中包含正确的代码,因此在其他位置出现错误。

正如您在错误消息中看到的那样:当您尝试使用HtmlEditorExtender提交表单问题时 因此,只需删除或禁用它即可快速解决问题。

对于HtmlEditorExtender的错误,我们需要一些信息,当然,如果你还需要解决它。

答案 1 :(得分:0)

假设这些控件位于ItemTemplate的{​​{1}}内:

  • ListView无法使用,因为它正在尝试在页面中找到控件;
  • FindControl("DDL")无法使用,因为ListView1.FindControl("TextBox2")中会有多个TextBox2个实例。

请改为尝试:

ListView

答案 2 :(得分:0)

我假设您的实际代码中没有拼写错误:

OnSelectedIndexChanged="DLL_SelectedIndexChanged"

事件处理程序是DDL_SelectedIndexChanged。

您是否设置了一个断点来检查事件处理程序是否未被调用,或者在它未能执行您希望它执行的转换后是否在某个时刻挽救?