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 />");
}