“承蒙抬爱”,MSDN Webcast给了我一个和大家探讨ASP.NET AJAX的机会。
我为MSDN Webcast准备了一个《深入浅出ASP.NET AJAX系列》,共有十多次课程,希望能够为大家系统的讲解一下如何使用ASP.NET AJAX框架进行开发。在这个系列中,我会尽可能的从“使用”入手,然后对于ASP.NET AJAX框架进行一定程度的深入讲解,使大家能够更自由地使用ASP.NET AJAX框架,并且能够自己着手解决一些使用中的问题。简单地说,这个系列中最着重的就是尽可能的“授人以渔”。
希望大家对我的这个系列多提意见和建议,并回复在这篇文章中,我需要您的反馈来改进我的表现。
已有课程:
-
ASP.NET AJAX深入浅出系列课程(1):ASP.NET AJAX 概述(3月13日):对于ASP.NET AJAX的大致功能进行概述和演示,通过简单的演示让听众了解到ASP.NET AJAX框架的强大之处,以及对于开发带来的便捷。并且对于学习和研究ASP.NET AJAX,以及开发ASP.NET AJAX使用的工具进行简单演示和介绍。(
链接)(
幻灯片)(
示例代码)(
视频)(
自我总结)
-
ASP.NET AJAX深入浅出系列课程(2):UpdatePanel的使用(上)(3月29日):详细讲解了UpdatePanel作为ASP.NET控件的使用方式,并介绍UpdatePanel的调试方式,提出最佳实践。在课程中也会剖析UpdatePanel的基本实现原理。通过本次课程,听众可以熟练地使用服务器端编程来使用UpdatePanel并了解其基本原理。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(3):UpdatePanel的使用(下)(4月10日):详细讲解UpdatePanel在客户端形成的一个生命周期,介绍如何使用脚本编程来更好的使用UpdatePanel。在课程中也会剖析UpdatePanel的数据传输方式。通过本次课程听众可以掌握客户端生命周期的方方面面,以及它们的使用方式。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(4):客户端访问WebService(上):基本使用方式(5月14日):从客户端访问WebService是ASP.NET AJAX中重要的功能,合理的使用则可以真正体现出AJAX技术的优势。本次课程将会讲解客户端访问WebService的基本方式,听众可以了解如何在应用中使用到ASP.NET AJAX的这一功能。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(5):客户端访问WebService(中):参数类型的序列化与反序列化(6月11日):从客户端访问WebService是ASP.NET AJAX中重要的功能,合理的使用则可以真正体现出AJAX技术的优势。本次课程将会详细介绍客户端访问WebService对于复杂参数类型的支持和变化,以及ASP.NET AJAX提供的JSON序列化能力。通过这次课程,听众能够了解如何让自己的WebService可以支持任意的复杂类型,以及如何将ASP.NET AJAX的JSON序列化与反序列化用到开发中去。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(6):客户端访问WebService(下):原理与细节(6月21日):从客户端访问WebService是ASP.NET AJAX中重要的功能,合理的使用则可以真正体现出AJAX技术的优势。本次课程将会简单讲解客户端访问WebService的原理,并且讲解这一功能的一些高级运用和使用中的一些变化与技巧。通过这次课程,听众将对ASP.NET AJAX中这一功能进行更深入的了解,可以将其灵活地运用到自己的应用中。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(7):Microsoft AJAX Library对于JavaScript原生对象的扩展(上)(6月25日):AJAX技术的基础就是JavaScript,而JavaScript开发中的基础即为原生对象。此外,Microsoft AJAX Library为原生对象进行了扩展,使AJAX应用程序的开发更为容易。从本次课程开始,我们将使用两节课来详细讲述JavaScript中最常用的原生对象,以及Microsoft AJAX Library与此相关的扩展。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(8):Microsoft AJAX Library对于JavaScript原生对象的扩展(下)(7月3日):AJAX技术的基础就是JavaScript,而JavaScript开发中的基础即为原生对象。此外,Microsoft AJAX Library为原生对象进行了扩展,使AJAX应用程序的开发更为容易。本次课程连同上次课程会详细讲述JavaScript中最常用的原生对象,以及Microsoft AJAX Library与此相关的扩展。 (
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(9):使用Microsoft AJAX Library中的面向对象特性来进行开发(7月9日):理论和实践证明,合理使用面向对象编程能够提高组件的复用程度,并且使项目易于维护和扩展。本次课程将讲述Microsoft AJAX Library中的面向对象类型系统,这样开发人员就可以在客户端使用JavaScript进行面向对象编程了。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(10):基于Microsoft AJAX Library扩展客户端组件(7月23日):利用面向对象类型系统是扩展组件的常用方法,但是我们在客户端进行开发的时候也不能忘记正在使用的是JavaScript这个非常灵活的动态语言,使用一些特殊的方式来扩展组件有时候会得到更好的效果。本次课程将讲述最常用的基于Microsoft AJAX Library扩展客户端组件的方式,适用情况,以及相关注意点。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(11):Microsoft AJAX Library中异步通信层使用(8月2日):Microsoft AJAX Library为了便于开发AJAX应用提出了一个异步通信层。使用这个异步通信层可以方便地发出AJAX请求,而且事实上,整个ASP.NET AJAX的客户端与服务器端的通信都是由它负责的。我们这节课将讲解一下这个异步通信层的使用方式,它可以方便我们做“纯粹”的AJAX应用。 (
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(12):Microsoft AJAX Library中异步通信层的扩展(8月14日):Microsoft AJAX Library为了便于开发AJAX应用提出了一个异步通信层,它是整个ASP.NET AJAX客户端AJAX请求的基础。事实上,我们能够基于这个通信平台进行轻松的扩展,使它能够支持不同的通信方式。这节课我们就来讲一下该如何来扩展异步通信平台。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(13):ASP.NET AJAX提供的Profile Service(8月28日):Profie是ASP.NET 2.0的重要特性之一,而ASP.NET AJAX提出了Profile Service,使开发人员能够方便地在客户端以AJAX的方式来处理Profile信息。这节课我们将来了解这个ProfileService的使用和扩展方式。 (
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(14):Profile Service的实现方式与扩展(9月5日):Profie是ASP.NET 2.0的重要特性之一,而ASP.NET AJAX提出了Profile Service,使开发人员能够方便地在客户端以AJAX的方式来处理Profile信息。这节课我们将来了解这个ProfileService简单的功能细节以及如何扩展Profile Service。(
链接)(
幻灯片)(
示例代码)
-
ASP.NET AJAX深入浅出系列课程(15):使用ASP.NET AJAX提供的Authentication Service(9月19日):Authentication Service是ASP.NET AJAX提供的另一个Application Service,能够让我们以AJAX方式来使用用户登录等功能。本次课程主要讲述如何来使用Authentication Service。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(16):ASP.NET AJAX提供的Authentication Service的实现方式与扩展(9月29日):Authentication Service是ASP.NET AJAX提供的另一个Application Service,能够让我们以AJAX方式来使用用户登录等功能。本次课程主要讲述Authentication Service的简单实现细节以及如何扩展Authentication Service。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(17):关注ASP.NET AJAX的核心:ScriptManager(10月10日):在之前的课程中我们已经接触过了ASP.NET AJAX的核性控件:ScriptManager。但是ScriptManager还有一些额外的功能值得我们再次给予关注。本次课程将关注ScriptManager的特殊功能,以及它们在开发过程中所起的作用。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(18):ASP.NET AJAX的国际化与本地化支持(10月24日):支持国际化与本地化已经成为越来越多项目的要求了。ASP.NET 2.0提供了开发良好的国际性项目的支持,ASP.NET AJAX也不例外。本次课程将关注于ASP.NET AJAX所提供的脚本国际化和本地化功能。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(19):VS 2008的JavaScript代码提示功能(11月6日):VS 2008即将发布,其中的JavaScript代码提示功能异常强大。不过要充分利用这些功能,开发人员还需要给与一点“协助”。本次课程将让听众了解如何使用VS 2008的JavaScript代码提示功能。(
链接)(
幻灯片)(
示例代码)(
视频)
-
ASP.NET AJAX深入浅出系列课程(20):使用Microsoft AJAX Library中的浏览器兼容功能(11月13日):兼容不同的浏览器始终是客户端中心开发不可避免却又不方便实现的功能。本次课程将让听众了解如何使用Microsoft AJAX Library中的浏览器兼容层方便地开发AJAX应用程序。(
链接)(
幻灯片)(
示例代码)(
视频)
Feedback
老师!!!!11 12 13 怎么不能下载啊!!急啊
如果返回自定义类型,那是不是把DataTable里面的各行数据赋给自定义类型,然后返回类型的集合,在页面上遍历这些集合取出类,再访问属性得到类里面的数据?
我返回的集合是System.Collections.Generic.List<MyData>,在JS里面可以通过回调函数得到,但不知道怎么遍历List里面的数据,不知道用什么函数名。请老师告知一二啊...
还有个问题是,如果DataTable里面的列很多的话,那用自定义类型是不是就麻烦了啊?
或者是我理解的问题?
@蟛蜞
List在客户端就是普通的数组,DataTable列多的话可能是麻烦一些。
不过这也属于一劳永逸的吧,而且有自动化的工具可以使用。
老师说的自动化的工具是什么工具啊?
$get() 是根据id取对象,这与文档的深度有关系吗?是不是id所处的任何层次都可以被$get()操作得到?
@蟛蜞
$get就是document.getElementById
MSDN Webcast - ASP.NET AJAX深入浅出系列课程(13):ASP.NET AJAX提供的Profile Service(Level 300) 链接不正确..
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="0" AssociatedUpdatePanelID="UpdatePanel1">
<ProgressTemplate>
正在处理,请稍后
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
在实际使用时,有UpdateProgress1与UpdatePanel1关联(AssociatedUpdatePanelID="UpdatePanel1").目的是只有在UpdatePanel1异步刷新时才显示UpdateProgress1的内容.但是触发UpdatePanel1异步刷新的按钮Button1在UpdatePanel1外(在实际的页面中,由于内容的排布,Button1不能放在UpdatePanel1内),这时点击了Button1,UpdatePanel1更新了,但UpdateProgress1并没有显示.这时应该怎样做?
望指教,谢谢!
@Carlo
对,的确不会显示。这种情况下您必须强制UpdateProgress1显示。
请问老师,如何使用身份验证来判断用户是否有权使用Web Service。
在调用服务之前,怎么判断服务调用者有权调用服务?
是否要另外做个验证用户的服务呢?
赵老师,你好!怎么有些教程没有视频的?而有些Demo下载地址是一样的?
14讲没有视频,pp也没有,示例代码跟15讲一样!
@aito
14和15我都没有放上去呢,怎么会讲得东西一样呢?
赵老师,应用了你在 客户端访问WebService(中) 的4_JavaScriptConverterUsage.aspx 中的例子,想实现将DataTable中的数据绑定到客户端Select,但不成功。不知问题出现在哪里,请您帮忙解决一下,谢谢!
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="
http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>JavaScriptConverter Usage</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Name="PreviewScript.js" Assembly="Microsoft.Web.Preview" />
</Scripts> <Services>
<asp:ServiceReference Path="DataTableService.asmx" InlineScript="true" />
</Services>
</asp:ScriptManager>
<input type="button" value="Get DataTable" onclick="getDataTable();" />
<br />
<select id="Select1" style="width: 124px">
<option></option>
</select>
<div id="result"></div>
<script language="javascript" type="text/javascript">
var MySelect1;
var flag;
function pageLoad()
{
flag=!flag;
if(flag)
{
MySelect1=new Sys.Preview.UI.Selector($get('Select1'));
MySelect1.initialize();
MySelect1.set_textProperty("ChaXunXiangMu_Name");
MySelect1.set_valueProperty("ChaXunXiangMu_ID");
}
if(!flag)
{flag=true}
}
function getDataTable()
{
DataTableService.GetDataTable(onSucceeded, onFailed);
}
function onSucceeded(result)
{
// alert(result);
MySelect1.set_data(result);
MySelect1.dataBind();
var sb = new Sys.StringBuilder("<table border='1'>");
sb.append("<tr><td>ID</td><td>Text</td></tr>");
for (var i = 0; i < result.rows.length; i++)
{
sb.append(
String.format(
"<tr><td>{0}</td><td>{1}</td></tr>",
result.rows[i]["ID"],
result.rows[i].Text));
}
sb.append("</table>");
$get("result").innerHTML = sb.toString();
}
function onFailed(error)
{
alert(error.get_message());
}
</script>
</form>
</body>
</html>
@吴祝明
我想,尽量少用Preview里的控件吧,个人觉得帮不了什么大忙。还是直接写来的方便。:)
赵老师,在客户端开发,微软提供了 ASP.NET AJAX 脚本,希望你能在将来的课程中专题传授一下这方面的知识,谢谢!
@吴祝明
asp.net ajax脚本?Micorosft AJAX Library吗?之前的课程中已经讲了一部分了。
感谢赵老师,我是刚刚开始看这个系列的,边看边敲代码,您讲的真的很清楚。
Highly appreciate your valuable courses for us, and I substantially and quickly learned AJAX through your help. And you make me the best people in my team for AJAX :). Thank you very much!
讲的相当相当不错。只是,听的太辛苦,杂音太重了。但还是要说谢谢。
赵老师,为什么说Preview里的控件少用???我觉得里面的功能都非常强大啦,如果要自己写代码实现的话,是不是太难???
@jasonoiu
Sys.Preview里的那些其实是鸡肋,自己写也很容易阿。用起来反而会造成性能比较低。
老赵,你好,我有个问题是这样的:
ms的这个ajax是通过什么方式去保存页面状态(可能我这样说不准确),平常如果我自己写的话很多时候都是用innerHTML=“”,这样局限好大啊,用空闲的话烦指点一二
@nowkok
其实没有自动保存状态的机制,客户端到服务器端传递数据的方式其实只有hidden input和query string两种。:)
请问赵老师,WCF的服务是在Class Library工程中实现。以Console Application进行宿主。请问如何从服务返回一张图片?是返回图片的字节流吗,或者直接对image的类序列化,还是图片的地址?如果是返回地址,那地址应该怎么表示?我感觉这不同以往的ASMX服务开发,只要返回图片的URL地址就行。
麻烦老师多指点一二啊,呵呵。
@蟛蜞
为什么返回URL不行呢?写一个方法返回string就可以了阿。
处理好的图片放在服务的一个临时文件夹下吧,然后返回这个图片的地址?我用ASMX做服务时候就这个干的。
现在要是提供TCP绑定的服务,怎么用地址表示图片的位置呢?
如服务端点配置的地址是net.tcp://localhost/GetImg/ 那图片的临时文件夹的位置怎么指定啊?IIS可以通过虚拟目录直接指定到文件夹。
控制台宿主的服务好像不能直接指定到文件夹的位置吧?
@Jeffrey Zhao
多谢了,谢谢您的回复,现在又有个问题了:
我按您回复里说的分2种情况试验,
第一种query string:当前页面上有一个<input id="Button1" type="button" >和一个<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>,点击Button1借助XMLHttpRequest对象在当前页里Page_Load里写
if (Request.QueryString["type"] != null)
{
this.TextBox1.Text = "nihao";
}
给TextBox1赋值能执行,但最后页面上显示TextBox1的值并没改变。
第二种情况hidden input:当前页面有一个<input id="Button1" type="button" >、一个<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>和一个<input type="hidden" id="hidden1" runat="server" />(或用<asp:HiddenField ID="HiddenField1" runat="server" />),点击Button1给hidden或HiddenField1赋值,借助XMLHttpRequest对象在当前页里Page_Load里写
if (this.hidden1.Value!="")
{
this.TextBox1.Text = "nihao";
}
调试发现,this.hidden1.value的值就是"",出现这种情况我也能理解。
完成这两个实验后,我对微软的这个ajax里的UpdatePanel更加迷茫,我想他的整套基础也应该是XMLHttpRequest这个吧,但是他是通过什么方式实现他当前的这种效果呢?能否再指点一二,指个方向也行。谢谢了。
今天的(2007年11月6日)的VS代码提示功能的视频什么时候给放出来啊老赵??今天错过了听课。
能把你的课件给我发一份么?我非常想看看。
我的邮箱是hanxianlong888@163.com
谢谢赵哥了!
有没有人告诉你,讲课的时候不要整天用鼻子喷着那个mic呢?让人听得整节课都毛骨悚然!
@无名之人
不好意思,讲课的时候其实是用电话讲的,所以如果要写代码的时候就不会很方便。下次我会注意。
老赵,我遇到了一个非常奇怪的问题,而且还不知道该怎么解决了!!
用AlwaysVisibleControlExtender不能控制panel的显示位置了!!
是这样的:
有一个masterpage,该master页中有一个ScriptManager,有menu,还有其他的需要显示的一些信息。
用该masterpage生成的一个index.aspx页面中,我有两个panel需要浮动显示,于是放了两个panel,两个AlwaysVisibleControlExtender,然后,将两个AlwaysVisibleControlExtender 的 HorizontalSide分别设置为"left"和"right"
可是,我只看到了浮动条显示在左侧,右侧的并没有!!
我调试,将panel设置为一个,并将其HorizontalSide设置为center,又设置为right,可是均没有效果,无论我怎么设置,它都是只显示在左上角。!!!
求救老赵,帮帮我!!
我用的是VS2005我直接调试的时候不能调用样式表,不知道为什么?
来淘你的代码来了.哈哈.看到第四章才发现你的博客上有相关的下载链接.webcast上没有你的代码链接,比较遗憾.还好你做连接了.讲的不错.声音优美.
ASP.NET AJAX深入浅出系列课程(14):视频怎么没有啊?
赵老师,
你的讲得很细,涉及得也很广,谢谢!~~
今天在这提个要求, 不知您有没有时间,在你的课程里面,用到了很多工具, 我一一
在网上下载了, 不知怎么的. 使用的效果就是达不到. 不知您可否将那些工具也链接到你的 blog ,
谢谢!~~
@eagle2008
我想,为什么不在网上搜索一下呢?一搜一个准啊。
到第四章才发现你的博客上有相关的下载链接.webcast上没有你的代码链接,比较遗憾.还好你做连接了
webcast上没有你的代码链接,比较遗憾.还好你做连接了.讲的不错.声音优美
请问赵老师ASP.NET AJAX深入浅出系列课程(14)这节的视频什么时候有的下啊!
请问赵老师,这是什么问题啊?是连接数据库时候出现的。win2003的系统IIS6。
System.Data.SqlClient.SqlException: Cannot open database "GisDb" requested by the login. The login failed.
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'.
网上查了下,说要在数据库上添加NETWORK SERVICE用户,并赋予权限。我做了啊,还是不行。
我用集成windows身份验证登录的。
--引用--------------------------------------------------
Jeffrey Zhao: @eagle2008
我想,为什么不在网上搜索一下呢?一搜一个准啊。
--------------------------------------------------------
网上搜索那是当然可以, 不知怎么的, 都找不到合要求的, 我当然
是在自己努力找过的前提下, 再这么说的, 无奈是找不到了才这么说,
很抱歉!
请问赵老师,在ASP.NET页面中加入ScriptManager后,在网页中一个TextBox,用RequiredFieldValidator对其进行验证,为什么当TextBox为空时还向服务器提交,
@wangbaochang
需要兼容ASP.NET AJAX的Validator才行。
请问这个有依据的教材吗?要是有书参考学起来会更好吧。
感谢赵大哥提供资料。
再次非常感谢。
今天看一了节很不错。
我决定他完。
应该收获 不小。
谢谢~~~
赵老师:在你将的
ASP.NET AJAX深入浅出系列课程(2):UpdatePanel的使用(上)里的Demo3中的第一个例子在我这怎么不好使那?
代码:
<form id="form1" runat="server">
<div>
</div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout="false">
<ProgressTemplate>
DynamicLayout="false"
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<%=DateTime.Now %>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress2" runat="server" DynamicLayout="true">
<ProgressTemplate>
DynamicLayout="true"
</ProgressTemplate>
</asp:UpdateProgress>
<hr />
</form>
然后不就是写Button1的点击事件吗?
代码:
protected void Button1_Click(object sender, EventArgs e)
{
Thread.Sleep(3000); //没有这个方法
}
怎麽会出现这样的错误那!
错误:
1 当前上下文中不存在名称“Thread” D:\程序\AJAXEnabledWebSite1\Default5.aspx.cs 20 9 D:\程序\AJAXEnabledWebSite1\
是不是还要添加什么引用啊?
请问:ASP.NET AJAX深入浅出系列课程(14):为什么没有视频的下载呢~
谢谢.受益非浅......
<script type="text/javascript" language="javascript">
var lastPostBackButtonId = null;
var btnPrecedenceId = "<%= this.btnPrecedence.ClientID %>";
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(
function(sender, e)
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm.get_isInAsyncPostBack())
{
showMessage("Is AsyncPostBack.");// #1 我增加的
if (lastPostBackButtonId == btnPrecedenceId)
{
e.set_cancel(true);
if (e.get_postBackElement().id == btnPrecedenceId)
{
showMessage("不可重复发起优先的刷新。");
}
else
{
showMessage("请等待优先的刷新结束。");
}
return;
}
else if (e.get_postBackElement().id == btnPrecedenceId)
{
showMessage("发起优先的刷新,普通的刷新将被取消。");
}
else
{
showMessage("重新发起普通的刷新,前一次提交将被取消。");
}
}
lastPostBackButtonId = e.get_postBackElement().id;
});
</script>
我的疑问是:
1)UpdatePanel中的控件默认都是发送异步提交的,但是这个程序中,当点击按钮(优先按钮 or 普通按钮)后(只点击一次),程序中我增加的那行代码(#1)并没有显示啊,难道第一次提交不是异步的吗?
2)var lastPostBackButtonId = null;这句是在整个<script>标记的第一句定义的,而最后lastPostBackButtonId = e.get_postBackElement().id;这句的意图是改变了lastPostBackButtonId的值,这我就有点不明白了,最后这句代码还有什么意义呢,每次执行<script>...</script>的时候都是从第一句开始开始,而第一句就lastPostBackButtonId = null;了,就算后面再改变它的值,那第二次,第三次……执行<script>...</script>的时候不都是将它的值设置成null了吗?
新手问题,还请老师费心了。