【问题标题】:why dropdownlist adds the items again on reload ?(asp.net c#)为什么下拉列表在重新加载时再次添加项目?(asp.net c#)
【发布时间】:2016-05-06 15:25:44
【问题描述】:

你好,很抱歉,如果之前已经介绍过。

有一个错误让我烦恼了 2 天。

我有一个页面,当用户单击“BMW”徽标时将加载该页面 当页面加载下拉列表(称为“模型”)时,将从某个列表中获取值。

这里的问题是,每当我刷新页面 (F5) 时,即使我添加了“model.item.clear();”,它也会多次添加项目。方法。

所以底线是我只想添加项目一次,即使我重新加载了页面 (F5)

NewTransaction.aspx 是具有下拉列表(“模型”)的页面, 这是另一个带有“BMW 标志”的页面的代码

<a href="NewTransaction.aspx?type=Car&company=BMW"><img class="logo" style="width:200px" src="images/BMW.png" /></a>

这是下拉列表NewTransaction.aspx的代码

<asp:DropDownList ID="model" runat="server" CssClass="inputs" OnSelectedIndexChanged="model_SelectedIndexChanged"></asp:DropDownList>

这里是我从具有“汽车”对象的列表中输入数据的部分。 请注意,此代码在 "Page_load" 方法中

switch (Server.UrlDecode(Request["company"]).ToString())
        {

            case "BMW":
                model.Items.Clear();
                    foreach (Car n in OverLand.car)
                    {
                        if (n.made == "BMW")
                        {
                            model.Items.Add(n.model);
                        }
                    }


                break;

picture of the output.

请注意,它还有许多其他公司的“案例”。

谢谢。

编辑:我尝试了以下

switch (Server.UrlDecode(Request["company"]).ToString())
        {
            case "BMW":

                if (!IsPostBack)
                {
                    foreach (Car n in OverLand.car)
                    {
                        if (n.made == "BMW")
                        {
                            model.Items.Add(n.model);
                        }
                    }
                }        

                break;

然后我在 google chrome 中运行了该网站,它可以正常工作,但是我停止了它并再次重新运行它,并且下拉列表添加了 5 次这样的项目。 我不知道这里发生了什么.-.

编辑 2 :所以我注意到第一次一切正常,当我尝试重新加载页面时,谷歌浏览器将这条消息发送给我:i.imgur.com/EVjLxGD.png .

但是,如果我关闭项目并重新打开它,它会多次添加数据(我认为它等于页面刷新的次数 + 我从模型列表中选择模型的次数)并防止我必须从 IIS 中停止该站点,但这当然只是一种查看其他一切是否正常工作的方法,我想不出一个停止它的想法,除了制作一种检查有多少模型的方法我进入我的宝马数据库并将该计数器放入一个变量中,并将另一个条件放入我已经用来将模型添加到列表中以在 dropdownlist.Items.Count >Counter 后停止添加的“if”条件中,但我我还在寻找更好的解决方案。

【问题讨论】:

  • 是错字还是必须使用model.Items.Clear();
  • 将下拉列表的人口放入: if (!IsPostBack) { }
  • 这只是一个错字,是的,我现在编辑了它。
  • 我确实尝试添加“isPostBack”,但没有任何反应
  • @OmarElrayes,ViewState 正在保留组合框中的项目。我建议您将其数据绑定而不是手动添加项目。

标签: c# asp.net webforms


【解决方案1】:

按 F5 或刷新浏览器会导致它重复上次发出的请求。因此,如果您第一次访问页面(不是回发)然后按 F5 - F5 生成的请求也不会是回发。但是,如果您访问一个页面(不是回发)然后单击一个按钮(导致回发并引发点击事件),按 F5 也将是回发并且也会引发相同的点击事件。

您无法更改 IsPostBack 是否为真。您将不得不设计一些其他方法来了解是否需要重新加载列表 - 或者简单地 .Clear() 并重新加载它。

【讨论】:

  • 感谢您解释“回发”是如何工作的,所以我注意到第一次一切正常,当我尝试重新加载页面时,谷歌浏览器将这条消息发送给我:i.imgur.com/EVjLxGD.png .
  • 但是如果我关闭项目并重新打开它,它会多次添加数据(我认为它等于页面刷新的次数+我从模型中选择模型的次数列表)
  • 为了防止我不得不从 IIS 中停止该站点,但当然这只是查看其他一切是否正常的一种方式,我想不出停止的想法它除了创建一个方法来检查我在我的数据库中为 BMW 获得了多少模型并将该计数器放入一个变量中并将另一个条件放入我已经用来将模型添加到列表中以在何时停止添加的“if”条件中dropdownlist.Items.Count >Counter ,但我仍在寻找更好的解决方案
【解决方案2】:

好吧,我不敢相信我花了 3 天时间试图弄清楚问题实际上来自“IIS Express”(与 Visual Studio 相关的本地主机)。 正如我在第二次编辑中提到的,第一次运行网站时一切正常。

但是,如果你停止调试并重新运行它,它会多次添加项目。

我在我朋友的一台笔记本电脑上尝试了相同的代码,它确实运行良好! .

我注意到的是,当他停止调试时,他的“IIS”会自动关闭(当您停止调试时,它的图标会在任务栏中消失),但对我来说,我必须从“IIS”图标中手动停止网站任务栏。

我仍然需要对重复数据进行解释(请注意,发生这种情况时 IIS 不会停止托管站点),并且我需要一种在停止调试时停止 IIS 的方法(请注意,我正在使用 Visual Studio 2015 社区版)。

谢谢。

【讨论】:

    猜你喜欢
    • 2019-11-09
    • 2015-09-13
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多