【问题标题】:SelectedIndexChange Not FiringSelectedIndexChange 未触发
【发布时间】:2014-10-02 01:16:36
【问题描述】:

我在更新文本框时遇到下拉列表问题,这两个文本框都保存在列表视图中,更新面板中又位于项目模板中。

更新

我在同一个项目的不同网页中使用相同的代码而不使用上述容器,但是在将其与 lisview 和其他容器链接时遇到了问题。

我不确定问题出在哪里,除非有回调到服务器,否则 onClick 不会触发,无论下拉菜单是否包含在上述容器中。

任何帮助将不胜感激,在此先感谢。

使用 asp(第 1 次)和 VB 代码(第 2 次)。

<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 调试中浏览器控制台错误的屏幕截图

并扩展错误。

更新 3

添加了 JQuery 以尝试强制 PostBack。

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

到 JQ 的 ASP 链接

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

【问题讨论】:

  • 你的DDL_SelectedIndexChanged中的ctl是什么?
  • 你还能修复标记吗?为什么你认为没有开火?您是否尝试将断点设置为DDL_SelectedIndexChanged
  • 你是如何确定事件没有触发的?
  • 在 SelectedIndexChanged 上设置的断点,当 DDL 上的项目被选择时,它们不会激活,只有在有回发到服务器时才会激活。
  • 你有什么错误吗?可能在浏览器控制台中?

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


【解决方案1】:

您的下拉列表代码正确,所以在其他地方出错。

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

至于HtmlEditorExtender的错误,我们需要一点信息,当然,如果你还需要解决的话。

【讨论】:

    【解决方案2】:

    假设这些控件在您的ListViewItemTemplate 内:

    • FindControl("DDL") 不起作用,因为它试图在页面中查找控件;
    • ListView1.FindControl("TextBox2") 不起作用,因为在 ListView 中会有多个 TextBox2 实例。

    试试这个:

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

    【讨论】:

    • 感谢您的回复,但问题的根源似乎与 indexchanged 事件有关,除非先回调到服务器,否则它不会触发。我更新了原始问题以描述新发现。
    【解决方案3】:

    我假设您的实际代码中没有错字:

    OnSelectedIndexChanged="DLL_SelectedIndexChanged"
    

    其中事件处理程序是 DDL_SelectedIndexChanged。

    您是否设置了断点以检查事件处理程序是否没有被调用,或者它是否在执行您希望它执行的强制转换失败后的某个时刻退出?

    【讨论】:

    • 没有错别字,我在这里放了一个非常简化的版本,以免浪费空间/时间。是的,我一直在 selectedIndexChanged 上使用断点,它们仅在整个面板更新时触发,更奇怪的是,无论 DDL 是否在更新面板中,都会发生这种情况。感谢您对另一个问题的其他评论,但我看不到使用 JQ 或 JS 的方法。
    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多