asp.net - asp.net 页面如何知道哪个按钮触发了回发?

标签 asp.net httpwebrequest

我正在编写一些代码,通过执行与单击触发页面回发的按钮时生成的完全相同的 Web 请求来模拟对页面进行回发的效果。

问题是来自 Web 请求的响应与单击按钮时得到的响应不同。

在调查时,我发现即使 Page_Load 事件在我执行 Web 请求时被触发和处理,按钮单击的处理程序也没有被执行(意味着事件没有被触发,或者它被触发但没有被处理 -我猜更可能是前一种情况)。

所以我的问题是 - ASP.NET 如何知道单击了哪个按钮以便它可以调用适当的处理程序?

我认为这是通过使用 __EVENTTARGET 参数完成的 - 我已经在 Web 请求的帖子正文中正确设置了它,但这没有区别。

我查看了解码后的 __VIEWSTATE 参数,但在那里我看不到任何明显的东西。

任何人都可以提供任何进一步的帮助吗?

编辑:为了清楚起见,我是 不是 询问如何向 Web 应用程序添加点击处理程序。

相反,我正在查看 的应用程序已经有一个按钮单击事件处理程序,我想知道 asp.net 如何从传入的 Web 请求中找出要调用的按钮单击事件处理程序代码。

最佳答案

首先,一个 ASP.NET 按钮 <asp:button>呈现为 <input type="submit" runat="server"...>表单上的元素。关于回发,与其他控件相比,此按钮的行为有所不同。

点击时 <input type="submit"...>将自动触发回发 没有 ASP.NET 的帮助 (在 .htm 中尝试)。您可以通过查看 POST 正文的参数来确定单击了哪个按钮。按钮名称及其值(文本属性)将作为参数发送。 __EVENTTARGET 不在图片中,应该为空。此外,根据规范(单击的那个),在参数列表中将只有一个按钮控件。所以现在你知道哪个按钮被点击了。

那么__EVENTTARGET有什么用呢?

其他控件,如 <asp:DropDownList>呈现为 SELECT , 单击时不触发回发,而只是引发 onChange javascript 事件。如果您想通过 SelectedIndexChanged 在服务器端处理事件事件,ASP.NET 将不得不为您做一些额外的工作。如果为 DropDownList 设置 AutoPostBack = True,ASP.NET 将捕获原始的 onChange JS 事件并连接一个自定义的 __doPostBack JS 函数,该函数负责填充 __EVENTTARGET 和 明确提交表格。您现在可以通过检查 __EVENTTARGET 来确定触发回发的控件。

希望这个对你有帮助 !

关于asp.net - asp.net 页面如何知道哪个按钮触发了回发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3137016/

相关文章:

javascript - 有没有办法打破谷歌浏览器中的警告?

C# HttpWebRequest 与 WebRequest

c# - 使用 C# 的 SOAP 客户端

c# - 带有脚手架编辑 Controller 的新 ASP.net 核心项目只返回 404 页面未找到

javascript getelementbyID 不返回值

c# - DataSource和DataSourceID都定义在listview上,删除一个源

c# - 如何访问 MVC 3 中 Request.Form 集合中未验证的项目

c# - 使用 DropDownList 设置整个网站背景的问题

java - 用于 Java 的异步 HTTP 客户端

.net - 在 httpwebrequest 期间,什么可能导致 .docx 文件损坏?