1

JavaScript 用于想要纯粹在客户端做某事,或者想要以回发无法处理的方式向服务器发送某事的情况。

但是在 Visual Studio 2008 控件 ASP.NET C# 中,我看到当页面显示在浏览器中时,控件,即 GridView、FormView 和 LINKBUTTON (!) 都会javascript:thing在光标悬停在它们上时显示这一点。为什么?

回发仍然发生。甚至链接按钮也有这个 JavaScript 的东西,只要你点击它,就会发生完整的回发。

更改label.text等也在 pageload 事件中!

  • 那么为什么是 JavaScript 呢?为什么不是一个简单的按钮?为什么是链接按钮?
4

2 回答 2

1

在这种情况下,可以使用 JavaScript 调用向服务器发送附加数据,例如为网格保存一些客户端数据(例如调整大小的列的宽度或类似的东西)。服务器端框架使用这种方法来允许服务器端人员生成所有客户端代码。这是一种快速的解决方案(与组织良好的不显眼的 JavaScript 相比)。

于 2010-07-17T16:41:11.600 回答
0

ASP.NET 是无状态的。也就是说,每次请求页面时,服务器实际上都会构造整个页面及其控件和状态,然后响应请求。然后它呈现适当的 HTML 标记作为对请求的响应。

对于任何控件,如果将 autopostback 属性设置为 true,则如果控件导致回发(例如单击链接按钮),则页面将回发到服务器。

ASP.NET 如何回发页面?它使用一个名为 _doPostBack() 的 javascript 函数来完成。功能是 -

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

该函数用于将表单提交回服务器。_doPostBack 通过使用隐藏变量 __EVENTTARGET 和 __EVENTARGUMENT 接受参数 - 事件目标和事件参数。这告诉服务器哪个控件导致了回发,并将适当的参数传递给服务器。

如果您的 aspx 页面中有此代码 -

<asp:LinkButton ID="lnkButton" runat="server">LinkButton</asp:LinkButton>

相应生成的标记将是 -

<a id="LinkButton1" href="javascript:__doPostBack('lnkButton','')">LinkButton</a>

因此,假设您单击链接按钮,该页面由 __doPostBack() 函数回发。然后,在服务器上使用页面上的相应控件状态重新创建页面。为了获取页面上每个控件的状态,使用了 viewstate 等机制。加载页面后,服务器会计算并呈现响应标记。

于 2010-07-17T17:06:56.670 回答