【问题标题】:Drop downlist Event Issue下拉列表事件问题
【发布时间】:2011-11-02 07:22:43
【问题描述】:

我在 asp.net 中有一个 Web 项目,其中我有仪表板,其中有前七个日期的下拉列表,当我从下拉列表中选择日期时,它会从与所选日期匹配的文件夹中打开文件。我的下拉列表垂直排列一个奇怪的问题是,当我从 ist 下拉列表中选择日期时,它会很好地打开文件,而当我从任何其他下拉列表中选择日期日期值时,它会打开从 ist 下拉列表中打开的同一个文件,所有剩余的下拉列表的行为都一样。并且其他奇怪的问题是,当我开始从最后一个下拉列表中打开文件时很好,即当我开始 Ist 到最后它显示问题但是当我最后开始到 Ist 时它工作正常。请告诉我有什么可能性? 我的代码如下

Imports System
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports System.IO
Imports System.Data.SqlClient
Imports System.Diagnostics.Process
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Console


Partial Class DashBoard
    Inherits System.Web.UI.Page

    Protected Sub DD1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DD1.SelectedIndexChanged
        Response.Redirect("Reports/Daily Production and Stock Report (Crescent Ujala)/Daily Production and Stock Report (Crescent Ujala) " & DD1.SelectedValue & ".xls", True)
    End Sub
    Protected Sub DD2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DD2.SelectedIndexChanged
        Response.Redirect("Reports/Daily Production Efficiency Report (Crescent Ujala)/Daily Production Efficiency Report (Crescent Ujala) " & DD2.SelectedItem.Value.ToString & ".pdf", True)
    End Sub
    Protected Sub DD3_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DD3.SelectedIndexChanged
        Response.Redirect("Reports/September Sowing Report/September Sowing Report " & DD3.SelectedItem.Value.ToString & ".ods", True)
    End Sub
    Protected Sub DD4_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DD4.SelectedIndexChanged
        Response.Redirect("Reports/September Sowing Report Area-1/September Sowing Report Area-1 " & DD4.SelectedItem.Value.ToString & ".ods", True)
    End Sub
    Protected Sub DD5_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dd5.SelectedIndexChanged
        Response.Redirect("Reports/September Sowing Report Area-2/September Sowing Report Area-2 " & dd5.SelectedItem.Value.ToString & ".ods", True)
    End Sub
    Protected Sub DD6_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DD6.SelectedIndexChanged
        Response.Redirect("Reports/Daily P & L Cost sheet/Daily P & L Cost sheet. " & DD6.SelectedValue & ".xls", True)
    End Sub
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Me.IsPostBack Then
            'Add Values to Dropdownlist 1
            DD1.Items.Add(New ListItem("", ""))
            DD1.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -1, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -1, Now), "yyyy.MM.dd")))
            DD1.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -2, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -2, Now), "yyyy.MM.dd")))
            DD1.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -3, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -3, Now), "yyyy.MM.dd")))
            DD1.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -4, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -4, Now), "yyyy.MM.dd")))
            DD1.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -5, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -5, Now), "yyyy.MM.dd")))
            DD1.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -6, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -6, Now), "yyyy.MM.dd")))
            DD1.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -7, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -7, Now), "yyyy.MM.dd")))

            'Add Values to Dropdownlist 2

            DD2.Items.Add(New ListItem("", ""))
            DD2.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -1, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -1, Now), "yyyy.MM.dd")))
            DD2.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -2, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -2, Now), "yyyy.MM.dd")))
            DD2.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -3, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -3, Now), "yyyy.MM.dd")))
            DD2.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -4, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -4, Now), "yyyy.MM.dd")))
            DD2.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -5, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -5, Now), "yyyy.MM.dd")))
            DD2.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -6, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -6, Now), "yyyy.MM.dd")))
            DD2.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -7, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -7, Now), "yyyy.MM.dd")))

            'Add Values to Dropdownlist 3

            DD3.Items.Add(New ListItem("", ""))
            DD3.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -1, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -1, Now), "yyyy.MM.dd")))
            DD3.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -2, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -2, Now), "yyyy.MM.dd")))
            DD3.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -3, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -3, Now), "yyyy.MM.dd")))
            DD3.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -4, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -4, Now), "yyyy.MM.dd")))
            DD3.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -5, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -5, Now), "yyyy.MM.dd")))
            DD3.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -6, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -6, Now), "yyyy.MM.dd")))
            DD3.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -7, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -7, Now), "yyyy.MM.dd")))

            'Add Values to Dropdownlist 4
            DD4.Items.Add(New ListItem("", ""))
            DD4.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -1, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -1, Now), "yyyy.MM.dd")))
            DD4.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -2, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -2, Now), "yyyy.MM.dd")))
            DD4.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -3, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -3, Now), "yyyy.MM.dd")))
            DD4.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -4, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -4, Now), "yyyy.MM.dd")))
            DD4.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -5, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -5, Now), "yyyy.MM.dd")))
            DD4.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -6, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -6, Now), "yyyy.MM.dd")))
            DD4.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -7, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -7, Now), "yyyy.MM.dd")))

            'Add Values to Dropdownlist 5

            dd5.Items.Add(New ListItem("", ""))
            dd5.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -1, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -1, Now), "yyyy.MM.dd")))
            dd5.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -2, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -2, Now), "yyyy.MM.dd")))
            dd5.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -3, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -3, Now), "yyyy.MM.dd")))
            dd5.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -4, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -4, Now), "yyyy.MM.dd")))
            dd5.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -5, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -5, Now), "yyyy.MM.dd")))
            dd5.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -6, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -6, Now), "yyyy.MM.dd")))
            dd5.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -7, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -7, Now), "yyyy.MM.dd")))

            'Add Values to Dropdownlist 6

            DD6.Items.Add(New ListItem("", ""))
            DD6.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -1, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -1, Now), "yyyy.MM.dd")))
            DD6.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -2, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -2, Now), "yyyy.MM.dd")))
            DD6.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -3, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -3, Now), "yyyy.MM.dd")))
            DD6.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -4, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -4, Now), "yyyy.MM.dd")))
            DD6.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -5, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -5, Now), "yyyy.MM.dd")))
            DD6.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -6, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -6, Now), "yyyy.MM.dd")))
            DD6.Items.Add(New ListItem(Format(DateAdd(DateInterval.Day, -7, Now), "dd-MMM"), Format(DateAdd(DateInterval.Day, -7, Now), "yyyy.MM.dd")))
        End If
    End Sub
End Class

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    我相信在您的浏览器中,您可能会收到打开/保存文件的提示。在这种情况下,当前的 html 文档(包括视图状态)将在浏览器中保持原样。因此,当由于下一个下拉选择而发生下一次回发时,ASP.NET 将推断两个下拉列表的选择已更改(因为视图状态属于对未选择下拉列表的页面的请求)并将尝试为此引发事件。它可能会根据控制树引发事件,因此第一个下拉列表的事件将首先引发并打开第一个文件。同样,response.redirect 会中断页面​​处理(并且不会处理后续事件)。这就是为什么你会看到奇怪的行为 - 例如,如果你先选择 DD4 然后它会打开相应的文件,现在如果你选择 DD5,它仍然会打开 DD4 文件。但是,现在如果您选择 DD2,它将打开 DD2 的文件,在此状态下,您再次尝试打开 DD3,它将打开 DD2。下拉列表中的任何选择都将打开最早选择的下拉列表的文件。

    补救措施很简单 - 在新窗口中打开文件。例如,将所有 response.redirect 行更改为类似

    ClientScript.RegisterStartupScript(Me.GetType(), "openfile", _
        "window.open('<put your file url here>');", true)
    

    更好的解决方案是删除自动回发和服务器端选择事件 - 相反,处理在 java 脚本中更改的选择并从那里启动文件。

    更好的解决方案 (IMO) 是更改页面 UI - 不使用下拉列表,而是提供前七个日期的下载链接(锚标记)。

    【讨论】:

    • 先生,我无法理解您的代码,因为它显示错误“打开的文件不是 system.tpye 的成员”,即使我也在标题中编码为“导入 system.type”
    • @Adeel,更正了代码!无论语法如何,我所做的是生成一个 java 脚本以在新窗口中打开文件 url(而不是重定向到该 url)。
    • 你能给我一段代码来用javascript打开文件吗?因为上面的代码仍然显示错误
    • 先生,感谢我已经解决了主要问题,但仍然存在问题是我如何将 dropdowlist 中的选定值与文件 url 连接起来,请先生紧急告诉我
    • @AdeelAslam,在javascript中,使用类似var ddl = document.getElementById('[put your dropdown list id here]'); url = '[put base url]' + ddl.options[ddl.selectedIndex].value + '.xls';的代码
    猜你喜欢
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 2012-06-19
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多