UpdatePanel的使用(上) updatepanel js 失效

UpdatePanel的使用(上)

UpdatePanel的简单属性:

Demo1.1-RenderMode:

<asp:UpdatePanel ... RenderMode="Block">UpdatePanel内容单独成块

<asp:UpdatePanel ... RenderMode="Inline">UpdatePanel内容与其它页面元素在同一行

Demo1.2-UpdateMode:

<asp:UpdatePanel ... UpdateMode="Conditional">按需刷新

<asp:UpdatePanel ... UpdateMode="Always">总是刷新

Demo1.3-ChildrenAsTriggers:

<asp:UpdatePanel ... UpdateMode="Conditional" ChildrenAsTriggers="false">本身内容不触发刷新

<asp:UpdatePanel ... UpdateMode="Always" ChildrenAsTriggers="false">抛出异常

Demo1.4-Triggers:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">

<Triggers><asp:PostBackTrigger ControlID="Button2" /></Triggers></asp:UpdatePanel>点击Button2时整个页面刷新

<Triggers><asp:AsyncPostBackTrigger ControlID="Button2"></Triggers></asp:UpdatePanel>点击Button2时UpdatePanel的内容刷新

//AsyncPostBackTrigger可以添加EventName,指定控件的某一个事件触发刷新,如EventName="Click"。

Demo1.5-NestedUpdatePanels:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">

<ContentTemplate>

<%= DateTime.Now %>

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

<asp:UpdatePanel ID="UpdatePanel2" runat="server">

<ContentTemplate>

<%= DateTime.Now %>

<asp:Button ID="Button2" runat="server" Text="Button" />

</ContentTemplate>

</asp:UpdatePanel>

</ContentTemplate>

</asp:UpdatePanel>

ChildrenAsTriggers属性指的是本身直属的内容控件,不包括在其它UpdatePanel中的控件,所以点击Button2时UpdatePanel1没有刷新。

相关API:

A。UpdatePanel:

1。Update方法:强制某个UpdatePanel更新

2。IsInpartialRendering:是否在输出过程中(bool)

B。ScriptManager:

1。GetCurrent静态方法:获得当前页面上的ScriptManage对象。(ScriptManager在母版页的情况下可以方便地取到,不用FindControl)

2。IsInAsyncPostBack:是否在部分回发过程中(ajax提交过程中)。

3。RegisterAsyncPostBackControl方法:指定某控件为异步PostBack控件。

4。RegisterPostBackControl:指定某控件为传统方式PostBack控件。

Demo2-API:

Button1在UpdatePanel外。Button2在UpdatePanel内。(只做演示,一般不会这样设计)

Page_Load事件:

ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(this.Button1);//异步方式PostBack

ScriptManager.GetCurrent(this).RegisterPostBackControl(this.Button2);//传统方式PostBack

Button1_Click事件:

this.UpdatePanel1.Update();//强制刷新

效果:Button1会异步提交,并因为自身事件强制UpdatePanel1刷新。Button2会刷新整个页面。

相关控件:

A。UpdateProgress(提示是否正在更新):

1。DynamicLayout属性:隐蔽时是否占位,默认值为true。

2。DisplayAfter属性:延迟多少时间后显示,单位毫秒,默认值为500。(比如设置为10秒,之后出现提示网络不好,请耐心等待)

3。AssociatedUpdatePanelID属性:关联的UpdatePanel的ID,默认为null。(不关联时,任何UpdatePanel更新都会显示)

B。Timer

1。Interval属性:更新时间间隔,单位毫秒,默认为60000(1分钟)。

2。Tick事件。Interval时间到后会触发此事件(如强制更新某UpdatePanel)。

注意:并非所有的控件都能在UpdatePanel中工作,如Validators和TreeView等等。

在UpdatePanel中使用Validators:

引用Validators.dll,在Web.config中的<system.web><pages>下加入:

  Code

  <tagMapping>

  <addtagType="System.Web.UI.WebControls.CompareValidator"mappedTagType="Microsoft.Web.UI.Compatibility.CompareValidator,Validators"/>

  <addtagType="System.Web.UI.WebControls.CustomValidator"mappedTagType="Microsoft.Web.UI.Compatibility.CustomValidator,Validators"/>

  <addtagType="System.Web.UI.WebControls.RangeValidator"mappedTagType="Microsoft.Web.UI.Compatibility.RangeValidator,Validators"/>

  <addtagType="System.Web.UI.WebControls.RegularExpressionValidator"mappedTagType="Microsoft.Web.UI.Compatibility.RegularExpressionValidator,Validators"/>

  <addtagType="System.Web.UI.WebControls.RequiredFieldValidator"mappedTagType="Microsoft.Web.UI.Compatibility.RequiredFieldValidator,Validators"/>

  <addtagType="System.Web.UI.WebControls.ValidationSummary"mappedTagType="Microsoft.Web.UI.Compatibility.ValidationSummary,Validators"/>
UpdatePanel的使用(上) updatepanel js 失效

  </tagMapping>

脚本注册:

A。禁止使用Response.Write方法

B。使用FrameWork所支持的方法(使用ClientScriptManager对象)

  Code

  ClientScriptManagercs=this.ClientScript;

  cs.RegisterArrayDeclaration("Hello","1,2,3");//定义数组,varHello=newArray(1,2,3);

  cs.RegisterClientScriptBlock(this.GetType(),"HelloWorld","functionhelloWorld(){alert(1);}",true);//functionhelloWorld(){alert(1);}

  cs.RegisterClientScriptInclude("HelloWorld","HelloWorld.js");//加载一个脚本,<scriptsrc="HelloWorld.js"type="text/javascript"></script>

  cs.RegisterExpandoAttribute(this.Button1.ClientID,"Hello","World");//注册额外属性,Button1.Hello="World";

  cs.RegisterHiddenField("hello","world");//<inputtype="hidden"name="hello"id="hello"value="world"/>

  cs.RegisterOnSubmitStatement(this.GetType(),"HelloWorld","returnwindow.confirm('Doyoureallywanttosubmittheform?')");

  //<formname="form1"method="post"action="ClientScriptManager.aspx"onsubmit="javascript:returnWebForm_OnSubmit();"id="form1">

  //functionWebForm_OnSubmit(){returnwindow.confirm('Doyoureallywanttosubmittheform?');returntrue;}

  cs.RegisterStartupScript(this.GetType(),"HelloWorld","<script>alert('Thepagehasloaded!')</script>");//<script>alert('Thepagehasloaded!')</script>

C。在异步更新的环境中注册脚本

1。使用ScriptManager对应的静态方法

2。新方法与原有方法的区别:

1)方法都要接受一个参数

2)并非所有注册过的脚本都会生效(当第一个参数为某个UpdatePanel时,注册后UpdatePanel不一定立即刷新)

3)RegisterExpandoAttribute方法多了个encode参数

3。这些静态方法完成可以替换原来的方法(上述B中的方法),因为在非异步回送环境中会使用ClientScriptManager的对应方法进行注册。

错误处理:

A。服务器端ScriptManager设置

1。AllowCustomErrorsRedirect属性:遇到错误是否自动根据web.config中的设置跳转,默认值为True。

//配置web.config:<customErrors mode="On" defaultRedirect="~/Error.aspx"></customErrors>

2。AsyncPostBackError事件:异步刷新中出现错误时触发的事件。可以写日志之类的。

3。AsyncPostBackErrorMessage属性:客户端接受到的错误信息。

B。客户端编程

1。响应PageRequestManager的endRequest事件。

2。将errorHandled属性设为true。

aspx:

  Code

  <asp:ScriptManagerID="ScriptManager1"runat="server"AllowCustomErrorsRedirect="false"OnAsyncPostBackError="ScriptManager1_AsyncPostBackError">

  </asp:ScriptManager>



  <asp:UpdatePanelID="UpdatePanel1"runat="server">

  <ContentTemplate>

  <asp:ButtonID="Button1"runat="server"Text="Button"OnClick="Button1_Click"/>

  </ContentTemplate>

  </asp:UpdatePanel>



  <divid="error"></div>

  <scripttype="text/javascript"language="javascript">

  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender,e)

    {

  e.set_errorHandled(true);

  $get("error").innerHTML="Sorry,anerrorhasoccurred:"+e.get_error().message;

  setTimeout(function()  {$get("error").innerHTML="";},3000);

  });

  </script>





aspx.cs:

  Code

  protectedvoidButton1_Click(objectsender,EventArgse)

    {

  thrownewException("CustomError!");

360docimg_55_  }

360docimg_56_  protectedvoidScriptManager1_AsyncPostBackError(objectsender,AsyncPostBackErrorEventArgse)

360docimg_57_  360docimg_59_  {

360docimg_60_  ScriptManager.GetCurrent(this).AsyncPostBackErrorMessage=e.Exception.Message;

360docimg_61_  }

360docimg_62_

动态操作:

A。要在生命周期的Load阶段结束之前完成动态添加控件操作

B。为每个动态控件指定明确的ID

C。不要为页面中的UpdatePanel添加新的Trigger

D。使用ContentTemplateContainer属性向UpdatePanel内添加新控件

UpdatePanel up = new UpdatePanel();

up.ID = "UpdatePanel1";

this.Form.Controls.Add(up);

LiteralControl lc = new LiteralControl(DateTime.Now.ToString());

up.ContentTemplateContainer.Controls.Add(lc);

Button btn = new Button();

btn.Text = "Refresh";

up.ContentTemplateContainer.Controls.Add(btn);

使用UpdatePanel注意事项:

A。请求内容数据大小没有任何减少

1。采集Form中所有<input/>并发送

2。包含ViewState

B。既然发到服务端的数据没有减少,就必须减少从服务器端返回的数据

1。使用多个UpdatePanel包含多个部分(不要用一个大的UpdatePanel把整个页括起来,比如一些静态文本的数据也从服务器返回,这是没有必要的)

2。UpdateMode尽量不要设为Always(用triggers或用update方法)

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/178606.html

更多阅读

消防栓的使用方法 消火栓的正确使用方法

消防栓的使用方法——简介消防栓是安装在消防给水管网上的,主要供消防队灭火使用。分地上、地下两种。地上消防栓适于气温较高的地方,其供水接口装在高于路面的垂直筒体上。地下消防栓和地下消防栓构造大致相似,主要由弯管、阀体、阀座

最详细的复印机的使用方法 复印机的使用方法图解

最详细的复印机的使用方法——简介复印机用起来还是要提前知道一些知识的,因为并不是傻瓜式的放上就可以复印的,在使用之前你要详细的了解下这几个步骤方法,用起来才会更方便。最详细的复印机的使用方法——方法/步骤

搜索引擎的使用技巧 搜索引擎收录的技巧

搜索引擎就是帮助我们来方便地查询网上信息的,但是当你输入关键词后,出现了成百上千个查询结果,而且这些结果中并没有多少你想要的东西,面对着一堆信息垃圾,这时你的心情该是如何的沮丧。不要难过,这不是因为搜索引擎没有用,而是由于你没

碘伏棉签的使用 碘伏棉签能带上飞机吗

碘伏棉签的使用——简介碘伏为广谱的强力杀菌消毒剂,对病毒、细菌、真菌及霉菌孢子都有较强的杀灭作用。本品对皮肤刺激性小,毒性低,作用持久。使用安全、简便。对组织基本无刺激性,用于皮肤及粘膜消毒,如手术前清洗、手术部位及伤口消毒

声明:《UpdatePanel的使用(上) updatepanel js 失效》为网友心如荒島分享!如侵犯到您的合法权益请联系我们删除