为什么在调用 Asp.Net ListBox 自动回发方法时会调用不相关的(自动回发)方法?

2024-05-26

我确信这很简单,但它让我发疯。

我的页面上有一个列表框来显示艺术家,当索引更改时它会调用一个方法,还有一个按钮,单击时会从另一个页面中的该列表中加载艺术家:

<asp:ListBox ID="lbArtists" runat="server" Rows="1" AutoPostBack="true" OnSelectedIndexChanged="ShowArtistsWorks" />

<asp:Button ID="btnEditArtist" runat="server" Text="Edit the artist" OnClick="LoadArtist" />

此外,我有一个类似的链接列表,其中也有一个自动回发方法:

<asp:ListBox ID="lbLinks" runat="server" Rows="1" AutoPostBack="true" OnSelectedIndexChanged="LoadLink" />

问题是,当我调用ShowArtistsWorks()通过点击btnEditArtist, the LoadLink()方法也会被调用。为什么会发生这种情况?当我没有更改索引时为什么会调用它lbLinks列表框?它不应该接近该方法。

EDIT:(相关)代码隐藏方法(

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack){
        GetArtists(); // populates artists listbox
        GetLinks(); // populates links listbox
    }
}

protected void LoadArtist(object sender, EventArgs e){
    if (lbArtists.SelectedValue != "")
        Response.Redirect("Artist.aspx?id=" + lbArtists.SelectedValue);
}

protected void LoadLink(object sender, EventArgs e)
{
    if (lbLinks.SelectedValue != "")
        Response.Redirect("Link.aspx?id=" + lbLinks.SelectedValue);
}

EDIT #2:我可以轻松地在各个方法中对此进行修复,以阻止它们在不应该发生的情况下发生,但我想了解为什么我不调用且仅从一个地方调用的方法会被无意中调用。

接受的答案:尽管 Boon(现在的 CRice)首先提出了解释和解决方案,但我决定接受 Jeff 更彻底的解释,因为这就是我想要的,更深入的分析。感谢所有回答的人。


更改事件会在每次相关的回发时引发 - 如 MSDN 主题“中所述”ASP.NET Web 服务器控件事件模型 http://msdn.microsoft.com/en-us/library/y3bwdsh3.aspx."

HTML 服务器控件中的更改事件 和 Web 服务器控件,例如 TextBox控件,不要立即 引起发帖。反而,他们被抚养长大 下次发帖时.

当用户单击“编辑艺术家”按钮时,ASP.NET 认为lbLinks.SelectedIndex已经改变,所以它调用它的SelectedIndexChanged处理程序。

The reasonASP.NET认为索引发生了变化是这样的:当页面第一次加载时,lbLinks没有选定的索引(或值),除非您明确设置它以另有说明。在执行此操作之前,所选索引为 -1,且其所选值为空字符串。呈现页面时,所选值(在本例中为空字符串)将写入视图状态以便 ASP.NET 可以判断回发时值是否已更改.

您可以在调试时通过在渲染之前检查列表框的选定索引和值来观察这一点,或者您可以使用在线视图状态解码器之一(像这个 http://lachlankeown.blogspot.com/2008/05/online-viewstate-viewer-decoder.html)以查看首次编写页面时的内容(尽管要阅读此内容,您需要了解序列化视图状态数据的结构 http://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic11).

当您下次回发时,HTML<select>元素lbLinks 具有非空值,并且它作为帖子数据的一部分提交。看一眼Request.Form["lbLinks"]你会发现它等于lbLinks.Items[0].Value.

ASP.NET 将发布的值映射到lbLinks.SelectedValue,但它也知道所选值曾经是一个空字符串- 它从视图状态获取旧值。由于这两个值不同,该过程会引发控件的选定索引更改事件,从而导致您观察到的不良行为。

正如布恩建议的那样 https://stackoverflow.com/questions/1733077/why-do-unrelated-autopostback-methods-get-called-when-an-asp-net-listbox-autopo/1752797#1752797,解决方案是始终显式设置SelectedIndex为了你所有的ListBox当您使用时进行控制OnSelectedIndexChanged事件,即使您只是将索引设置为零。

(AutoPostBack 设置是一个不相关的转移注意力的内容。如果将其从两个列表框中删除,它们的OnSelectedIndexChanged每次单击按钮时,事件都会触发。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在调用 Asp.Net ListBox 自动回发方法时会调用不相关的(自动回发)方法? 的相关文章

  • 访问 Asp.Net Core 应用程序中的 Web.config 设置?

    据我所知 asp net core 有一个新的配置系统 非常灵活 非常棒 但我喜欢 net 4 x 中基于 web config 的配置系统 例如 可以在 web config 文件中添加注释 因为它是一个 xml 文件 对我来说 值得坚持
  • 使用具有外键的表将数据从 asp.net 页面插入到我的数据库中

    我是一名初学asp net程序员 我的项目是网上购物课程 我有一些问题 我有 4 个表 它们之间有一些外键 CREATE TABLE dbo orderdetails orderid INT NOT NULL classid INT NOT
  • “通用”电话号码的基本正则表达式

    我需要一个正则表达式 用于 ASP NET 网站 来验证电话号码 它应该是灵活的 唯一的限制是 应至少为 9 位数字 没有字母 可以包含空格 连字符 单个 我搜索过 SO 和 Regexlib com 但我得到的表达式有更多限制 例如英国电
  • 在 ASP.NET 中调用异步方法时的令人困惑的行为

    我使用 Visual Studio 2012 创建了一个 ASP Web 应用程序 如果我修改默认页面如下 public partial class Default Page static async Task PerformSleepin
  • ASP.NET 项目在移动到另一台计算机时抛出 HTTP 错误 500.19

    我将一个 3 层 ASP NET 项目从运行 Visual Studio 2010 的系统复制到也运行 Visual Studio 2010 的系统 当我右键单击并选择浏览器中位于 UI 层下的文件夹内的文件上的视图时 我得到错误 HTTP
  • 无法使用 Javascript 重定向到另一个页面

    在 html 文件中使用 Javascript 重定向页面 我这样使用 window location href http www google com 它工作正常 但是当我在 aspx 中尝试时它不起作用 下面是我的代码 提前致谢
  • mvc 2中的图像上传和预览

    我正在通过转换 asp net 网站来学习 mvc 2 在我的页面中 我必须上传图像并显示图像的预览 下面给出了我的 asp net 页面的屏幕截图 我将模型创建为 public class Contest public int conte
  • index.g.cshtml 在哪里

    我正在尝试完成本教程 但是 通常 当我构建解决方案时 我会得到一个CS0234错误指出文件中缺少命名空间Index g cshtml cd 但是这个文件存在于哪里呢 我努力了 所有构建 清理 重建解决方案选项 我已重新启动 Visual S
  • 限制违反架构 - asp.net MVP

    如果我们在应用程序中定义了层次结构 对于前三层架构 我们如何限制后续开发人员违反规范 例如 在 MVP 不是 ASP NET MVC 架构的情况下 演示者应该始终绑定模型和视图 这有助于编写正确的单元测试程序 然而 我们也遇到过这样的情况
  • 如何在 asp.net 网站中使用 aspnetdb 数据库

    我使用 asp net 3 5 创建了一个网站 现在我使用 Membership API 和 aspnetdb 数据库为其添加了会员支持 我已经在本地机器上完成了所有测试 现在 在将该站点上传到服务器时 需要考虑与 aspnetdb 有关的
  • 如何在 Asp.Net 页面上的一处处理所有错误/消息?

    我在这里寻找一些指导 在我的网站上 我将内容放入 Web 用户控件中 例如 我将有一个新闻项控件 一个文章控件 一个联系表单控件 这些将出现在我网站上的各个位置 我正在寻找一种方法 让这些控件将消息传递到它们所在的页面 我不想将它们紧密结合
  • 为什么静态方法不能用作 ASMX Web 服务中的 Web 服务操作?

    我只是想了解为什么我不能在 Web 服务中使用静态 Web 方法 为什么会受到限制 有人可以给我对此进行简洁的解释吗 答案是 因为你不能 它不是这样设计的 其设计是 将创建 Web 服务类的实例 然后调用实例方法 我只能猜测微软为什么这样设
  • 表单身份验证 web.config 设置

    根 web config 文件中的此规范是否正确 我没有在受保护的文件夹中使用子 web config
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 锚标记 href 中的 eval

    我想要实现的目标是在锚标记的 href 中使用 Eval 作为参数 锚点嵌套在转发器内 为什么我不能使用后面的代码来实现这一点 我尝试了一些事情但没有运气 a href http MyWebsite ActiveUsers ID Inser
  • 在javascript中访问隐藏字段值

    我的表单中有一个隐藏字段 我正在服务器上设置隐藏字段的值并尝试从 javascript 访问该值 我收到错误 无法获取属性 值 的值 对象为 null 或未定义 如果我查看源代码 则会设置隐藏字段值 并且隐藏字段的 ID 与我正在调用的 I
  • GeneratePasswordResetTokenAsync 和GenerateUserTokenAsync 的默认TokenLifespan 是多少

    我到处都找过 但似乎无法确定每个选项的默认值是什么 我还需要知道是否有办法为每个设置不同的寿命 谢谢 对于任何令牌来说 默认值显然都是 24 小时 您可以将其设置为不同的值 但相同的值将同等地应用于所有令牌 GenerateEmailCon
  • ASP.net C#,采用不同参数类型的同名方法[重复]

    这个问题在这里已经有答案了 可能的重复 可以在 ASP Net MVC 中重载控制器方法吗 https stackoverflow com questions 436866 can you overload controller metho
  • 无法将 MVC 4 部署到服务器

    我的 Web 应用程序只是一个用 VS 2010 MVC 4 制作的简单 Web 应用程序 没有任何外部代码 它只是 VS 2010 的默认应用程序 我有 Plesk 的豪华 Windows 托管 我从未更改过帐户中的任何功能 我将所有文件
  • Asp.net MVC 路由 - 防止通过约束路由到 XML 文件

    我正在尝试找到一种方法来阻止用户访问特定的 xml 文件 我尝试过做 routes MapRoute SiteMap SiteMap siteMap xml new new isLocal new LocalHostRouteConstra

随机推荐

  • 如何找到所有带有某种装饰的类?

    在Java中 我们可以使用 类路径扫描 找到具有给定注释的所有类 我们如何在 TypeScript 中做类似的事情 有没有办法找到所有装饰有某种装饰的类 这是一个例子 它假设您有某种方式引用范围 这magical类装饰器创建一个名为的字符串
  • Node.js 进程内存不足错误

    FATAL ERROR CALL AND RETRY 2 Allocation Failed process out of memory 我看到这个错误 但不太确定它来自哪里 我正在从事的项目有以下基本工作流程 从其他来源接收 XML 帖子
  • Xcode 6 Launchscreen.xib 具有适用于 iPad 横向和纵​​向的不同资源

    使用 Xcode 6 中引入的 LaunchScreen 我可以定义用于 iPad 横向和纵 向的不同资源吗 由于两个 iPad 方向的特征是相同的 遗憾的是 顺便说一句 我无法区分两者 这是否意味着 要么对 iPad 横向和纵 向使用相同
  • 我们可以在displaytag中使用rowspan和colspan吗?

    我必须创建一个表 其结构是这样的 col1 col2 col3 col4 col3 1 col3 2 是否可以使用显示标签创建这样的数据网格 查看装饰器示例 http displaytag sourceforge net 1 2 tut d
  • 除了前一个按钮意图之外,如何添加另一个按钮意图?

    这是我的代码 它包含一个名为的按钮button1A当我单击它时 它会打开一个名为的列表list1 如何为另一个名为 button2A 的按钮添加代码 该按钮将打开一个列表 List2 import android os Bundle imp
  • Django如何通过模板修改数据库记录

    我想删除我选择的记录 并且run html将会刷新 我该怎么做 由于我使用函数run在views py中发送数据库中的记录 以及run需要一个参数构建 可以通过使用获得run name 所以我认为当我单击提交按钮时 我需要传递 run na
  • 从 Python 脚本创建可执行文件,同时获取较小的输出大小

    我的问题可能已经在某个地方得到了解答 但我仍然找不到直接的答案 我想从 python 代码创建一个独立的可执行文件 我已经尝试过很多解决方案 例如py2exe pyinstaller等等 但我的问题是输出文件大小很大 例如 在pyinsta
  • Eclipse CDT C/C++:包含另一个项目的头文件

    我在 Eclipse CDT 中有两个 C 项目main and shared In shared我有一个名为calc h 我想在中使用这个标头main 所以我做了以下事情 added include calc h到相关文件main In
  • Android 中的定制数字时钟

    您好 我想以 HH mm AM PM 的格式在我的应用程序中显示时间 数字时钟还包括秒 即 HH mm ss 上午 下午 如何避免显示秒 有没有什么可行的办法 请帮助我 您必须克隆该文件DigitalClock java要在您的应用程序中使
  • Sass 与 BEM,继承选择器

    我正在使用 Sass 3 4 1 和 BEM 所以我的 scss 是 photo of the day title font size 16px 我希望每次将鼠标悬停在 photo of the day标题发生了一些事情 这很常见 所以通常
  • intfmt: db "%d", 10, 0 在汇编中的含义

    我最近在我的一个汇编文件的顶部看到了这个 并意识到我在打印整数的过程中花了很长时间使用它 而没有真正意识到它最初来自哪里 在我的基本汇编模板中使用 或 10 0 是什么结尾的意思是 section data intfmt db d 10 0
  • 寻找基于循环固定大小数组的双端队列

    我正在寻找一个Deque其具有以下特点 它有固定的大小 如果我在头 尾添加元素 则另一端的元素会丢失 它是基于数组的 所以我可以在恒定时间内访问随机元素 我可以在前面或末尾添加元素 双端队列 我检查了Deque的实施JCF但我没有找到任何合
  • Ruby on Rails 中的枚举

    我是一名 C 程序员 我正在研究 ruby on Rails 但我可能在心态或其他方面遇到了一些麻烦 我有一个投票对象 该对象可以是赞成 中立或反对 我通常会让投票对象有一个像这样的字段 private VoteEnum voteEnum
  • 比较 2 个 linq 应用程序:意外结果

    我起草了2 ASP NET应用程序 using LINQ 一个连接到微软SQL服务器 另一个对某些专有内存结构 这两个应用程序都可以使用以下表格3 个 int 字段 有500 000 条记录 内存结构与 SQL Server 表相同 使用的
  • 当没有更多消息时退出 Spring Integration

    我使用 Spring Integration 4 1 配置从数据库中批量检索消息 而不是作为服务 我知道每天要处理十几条消息 因此我需要每天运行一次批处理 我的 jdbc inbound channel adapter 配置为检索 max
  • 在 Android 上使用 Excel 文件

    我正在开发一个应该能够创建 读取和写入 Excel 文件的模块 是否有 推荐 轻量级 Java 库用于处理可以在 Android 上运行的 Excel 文件 欢迎提出建议 Thanks 找到一个
  • 在 MVC 应用程序中配置 NHibernate 二级缓存

    我有一个使用 NHibernate 的 MVC3 应用程序 一切都很顺利 直到我开始尝试添加二级缓存 浏览网页几个小时后 我终于找到了我认为正确的 dll NHibernate Caches SysCache2 dll 并将其添加到我的项目
  • Python FFmpeg查询rtsp太慢

    目前 我正在尝试使用 python 和 FFmpeg 来查询原始格式为 h264 的 rtsp 数据 直播流视频的信息为 fps 29 分辨率 1280 720 我希望我可以以相同的格式 h264 查询数据并将其放入python队列中以便将
  • 使用 geom_bar 按列中一个特定值的计数对 y 轴进行排序

    想知道如何通过减少猕猴桃的数量来对 y 轴上的簇进行排序 df data frame df data frame matrix df nrow 200 ncol 2 colnames df lt c cluster name df clus
  • 为什么在调用 Asp.Net ListBox 自动回发方法时会调用不相关的(自动回发)方法?

    我确信这很简单 但它让我发疯 我的页面上有一个列表框来显示艺术家 当索引更改时它会调用一个方法 还有一个按钮 单击时会从另一个页面中的该列表中加载艺术家