ASP.NET AJAX深入浅出系列课程(学习总结一)

1.WebService 如果想在ScriptManager下使用的话,必须在类前添加[System.Web.Script.Services.ScriptService]标记,在调用的那个方法上添加[System.Web.Script.Services.ScriptMeth]标记
2.context.Response.ContentType = "text/plain";//添加的文件的类型为空白文本
3.JavaScriptSerializer serializer = new JavaScriptSerializer();
   string jsonEmp = serializer.Serialize(employee);   
   context.Response.Write(jsonEmp);
  //将JavaScript代码JSON序列化
4.alert(String.format(
     "Hello I'm {0} {1}, my title is '{2}'",
 employee.FirstName,
 employee.LastName,
 employee.Title));
//在JavaScript中显示,可以采用C#中的方法
5.
GetEmployee.ashx

<%@ WebHandler Language="C#" Class="AspNetAjaxOverview.GetEmployee" %>

using System;
using System.Web;
using System.Web.Script.Serialization;

namespace AspNetAjaxOverview
{
 public class GetEmployee : IHttpHandler
 {
  public void ProcessRequest(HttpContext context)
  {
   context.Response.ContentType = "text/plain";
  
 
   string firstName = context.Request.Params["firstName"];
   string lastName = context.Request.Params["lastName"];
   string title = context.Request.Params["title"];
   Employee employee = new Employee(firstName, lastName, title);
   
   JavaScriptSerializer serializer = new JavaScriptSerializer();
   string jsonEmp = serializer.Serialize(employee);
   
   context.Response.Write(jsonEmp);
  }

  public bool IsReusable
  {
   get
   {
    return false;
   }
  }

 }
}


6.UpdatePanel的全面使用

 RenderMode="Block"/"Inline" 区别 见图UpdatePanel_RenderMode.JPG

UpdateMode="Conditional" /UpdateMode="Always"
UpdateMode属性默认为Always,二者区别:页面中有多个UpdatePanel时不论哪个UpdatePanel刷新时,UpdateMode为Always时,这个页面一直跟着刷新,UpdateMode="Conditional"时,只有这个Panel内部的控件触发刷新时,它才会刷新。

ChildrenAsTriggers 默认为true,为FALSE时,即便它内部有控件触发刷新,它也不会刷新。

<asp:AsyncPostBackTrigger ControlID="Button1" />把Button1作为触发UpdatePanel刷新的控件

UpdatePanel的嵌套使用 里层的UpdatePanel刷新时只会刷新它自己,而外部的UpdatePanel刷新时会使两个同时刷新。

ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(this.Button1);//使Button1保持同步刷新
ScriptManager.GetCurrent(this).RegisterPostBackControl(this.Button2);//使Button2保持异步刷新

在给相应的Button添加Click事件,调用UpdatePanel的Update()事件
这样不管Button是否在UpdatePanel内部,都可以动态的将它转换成异步或同步的控件。
 

 var btnPrecedenceId = "<%= this.btnPrecedence.ClientID %>";//获得ID值
var prm = Sys.WebForms.PageRequestManager.getInstance();

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded();
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest();
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading();
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest();
Sys.WebForms.PageRequestManager.getInstance().add_endRequest();


<asp:Timer ID="Timer1" runat="server" Interval="3000">
    </asp:Timer>
//延时3秒(3000毫秒)执行

 /* 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

 <div id="message" style="color:Red;"></div>
    <script language="javascript" type="text/javascript">
  var timeoutSeed = null;
  function showMessage(message, timeout)
  {
   $get("message").innerHTML = message;
   if (timeoutSeed)
   {
    window.clearTimeout(timeoutSeed);
   }
   
   timeoutSeed = window.setTimeout(
    function(){ $get("message").innerHTML = ""; },
    timeout || 2500);
  }
 </script>

7.[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]//不知道什么意思

arguments表示传入参数的集合
format字符串的格式化
8.
failedCallback//回调函数
 function failedCallback(error)
   {
    var message = String.format(
     "Timeout: {0}/nMessage: {1}/nExceptionType: {2}/nStackTrace: {3}",
     error.get_timedOut(),
     error.get_message(),
     error.get_exceptionType(),
     error.get_stackTrace());
   
    alert(message);
   }

$get("result").innerHTML = result;//将result值显示在ID为result的控件上

   emp.__type = $get("comboStatus").value;//不知道什么意思

8.动态添加一个表格
 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();

9.使用期HTTP GET访问方法
   1。使用ScriptMethodAttribute进行标记 --UseHttpGet属性设为 true;
   2.客户端使用代理的方法没有改变。
   3.参数将使用Query String 进行传递。

///
 <input type="button" value="Get Random" οnclick="getRandom()" />
  <input type="button" value="Get Range Random" οnclick="getRandom(50, 100)" />
  
  <script language="javascript" type="text/javascript">
   function getRandom(minValue, maxValue)
   {
    if (arguments.length != 2)
    {
     MethodOverloadedService.GetRandom(onSucceeded);
    }
    else
    {
     MethodOverloadedService.GetRangeRandom(minValue, maxValue, onSucceeded);
    }
   }
   
   function onSucceeded(result)
   {
    alert(result);
   }
  </script>
重写getRandom函数
不管是没有参数,还是有两个参数都可以调用getRandom(minValue, maxValue),

 

10.
 [WebMethod(EnableSession=true)]
    public int AddOne()
 {
  HttpSessionState session = HttpContext.Current.Session;

  object objValue = session["value"];
  int value = objValue == null ? 0 : (int)objValue;//三目运算符
  value++;
  session["value"] = value;
  return value;
    }
   
在WebServcie中调用Session时,需要进行标记[WebMethod(EnableSession=true)]或
[WebMethod(true)],EnableSession可以省去。

 11.   public string HelloWorld()
 {
  if (!HttpContext.Current.User.Identity.IsAuthenticated)
  {
   throw new ApplicationException("Please log in first.");
  }
  
  return "Hello, " + HttpContext.Current.User.Identity.Name;
    }
为了防止WebSerivce中的方法被非法调用,因此可以采用上述方法对方法进行保护。

12.
    <div id="info"></div>
 <script language="javascript" type="text/javascript">
  function display(text)//将text里面的内容显示在id为info的DIV中
  {
   document.rementById("info").innerHTML += (text + "<br />");
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值