__doPostBack 方法如何被调用?调用方法在哪里?

2024-05-13

我用了一个<asp:Button />控件,并且在浏览器中渲染后该控件没有click分配的事件属性。它到底是如何调用服务器端事件的?

ASPX 代码:

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="TestClickEvent" />

上述控件在浏览器中渲染如下代码:

<input type="submit" name="Button1" value="Button" id="Button1">

下面的代码在浏览器中渲染,设置__EVENTTARGET. 我的疑问是如何__doPostBack方法被调用?调用方法在哪里?

 function __doPostBack(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
            theForm.__EVENTTARGET.value = eventTarget;
            theForm.__EVENTARGUMENT.value = eventArgument;
            theForm.submit();
        }
    }

简单的答案: The __doPostBackJavaScript 函数根据具体情况调用<asp />控制and它处理的事件。

详细答案:这取决于。


首先,让我们介绍一下您的示例。你有一个<asp:Button />它被呈现为标准<input type="submit" />。一切都在ASP.NET Web 窗体 http://www.asp.net/web-forms围绕标准HTML <form> http://en.wikipedia.org/wiki/Form_%28HTML%29标签。一个 HTML<form>已提交without通过单击 JavaScript 来使用或协助<input type="submit" /> button.

考虑到这一点,您可以很好地看到(您已经注意到)渲染的<input type="submit" />按钮确实not有一个onclick已分配事件。而且,正如您所看到的,单击按钮时就会提交表单。

当涉及到后端(C#/VB.NET/等)代码如何执行时<input type="submit" />单击按钮:这一切都由 ASP.NET Framework 本身处理,超出了本问题/答案的范围。


其次,现在我们来介绍一下__doPostBack是什么,以及如何使用它。 __doPostBack只是一个用于提交 HTML 的辅助 JavaScript 函数<form>。由于上述原因,您现在知道为什么<input type="submit" />按钮确实not需要致电__doPostBack功能。

为了简单起见,让我们看一个 ASP.NET 页面,它有一个<asp:DropDownList />控制,并且它具有SelectedIndexChanged分配的事件处理程序:

<asp:DropDownList ID="MyDropDownList" AutoPostBack="true" OnSelectedIndexChanged="MyDropDownList_SelectedIndexChanged" runat="server" />

The <asp:DropDownList />渲染如下:

<select id="ctl00_MyDropDownList" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MyDropDownList\',\'\')', 0)" name="ctl00$MyDropDownList"></select>

let's ignore the setTimeout function in the onchange event - it's merely a hacky workaround used by ASP.NET - and let's focus on the __doPostBack function inside of it.

正如你在这里看到的,__doPostBack功能is被称为onchange事件处理程序。关键的区别在于改变 a 的值<asp:DropDownList /> or <select />控制不会导致浏览器提交表单!

ASP.NET Framework 再次在内部处理提交表单时后端代码的执行方式(无论是通过__doPostBack功能与否)。


最后,关于细节__doPostBack:它接受两个参数 -eventTarget and eventArgument. eventTarget包含渲染的 HTMLid引起回发的控件的属性;和eventArgument是一个可选参数,可用于将附加数据传递到后端代码。


编辑附加信息:OP 提出了一个非常有趣的问题 - 当有多个提交按钮时会发生什么?

嗯,在一个POST操作,浏览器包括value of the <input type="submit" />这导致操作启动。

这意味着,正如您获得您的价值观一样<input />元素,您还可以查询哪个按钮导致了提交!

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

__doPostBack 方法如何被调用?调用方法在哪里? 的相关文章

  • 如何为WCF服务创建重定向?

    我的网站 A 上托管了一个 WCF 服务 我还有另一个网站 B 它使用 IIS URL 重写将所有请求重定向到我的网站 A 但是 站点 B 不处理任何对 svc 文件的请求 返回 404 not find 知道如何让它发挥作用吗 UPD重定
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 捕获 .aspx 和 .ascx 页面中的异常

    问题说明了一切 请看以下示例代码 ul li li ul
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 如果找不到指定的图像文件,显示默认图像的最佳方式?

    我有一个普通的电子商务应用程序 我将 ITEM IMAGE NAME 存储在数据库中 有时经理会拼错图像名称 为了避免 丢失图像 IE 中的红色 X 每次显示产品列表时 我都会检查服务器中是否有与该产品相关的图像 如果该文件不存在 我会将其
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐