亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

解析AjaxPro與服務器端交互過程中如何傳值

2024-09-01 08:26:21
字體:
來源:轉載
供稿:網友

用asp.net開發Ajax有兩種主流,一種是微軟推出的技術,其中一個最常用的就是UpdatePanel控件,還有一種是AjaxPro技術。

這種技術有著各自的特點。采用微軟的技術開發也沿用了微軟一貫的簡單化、傻瓜化的特點,開發簡單Ajax程序幾乎不需要了解任何網頁腳本知識和XHTML知識,缺點也有一些,通常會帶來一些不必要的網絡流量(整個UpdatePanel控件內所有的控件內容都會提交),另外在VS2005下經常會出現“***不是已知元素 原因可能是網站中存在編譯錯誤 ”的提示,雖然有治標不治本的辦法,但是經常出現這種提示,也夠讓人心煩的。

而AjaxPro的起點較高,需要開發人員孰知Js腳本知識和XHTML相關知識,因為所有的方法需要你自己編寫網頁腳本。開發速度相對會較慢一點,調試也會困難一點(JS調試就是麻煩)。

網上有不少講述怎么使用AjaxPro調用服務器端方法的例子,我大概看了一下,估計只有一個原本,然后被Copy了N遍,所以到處都是,可惜的是那篇文章里沒有降到如何把客戶端的數據傳送到服務器,比如我想在用戶注冊時那個用戶名是否被注冊了,怎么辦?

查看了網上雷同的N篇文章之后沒有找到答案,后來自己琢磨了很久,才琢磨出來,下面展示一下用法。
 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>

<!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/Dtd/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>用戶注冊</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table width="95%" border="0" align="center" cellpadding="3" cellspacing="1" bordercolor="#FFFFFF" style="border-collapse: collapse">
<tr align="center">
<td height="20" colspan="2">&nbsp;</td>
</tr>
<tr class="tdbg" >
<td width="50%"><b>用戶名:</b><BR>
不能超過14個字符(7個漢字)</td>
<td width="50%" align="left">
<asp:TextBox ID="txtUserName" runat="server" CssClass="input" Columns="30" MaxLength="14" onblur="javascript:checkName();void(0);"></asp:TextBox><div id="errorMsg"></div><font color="#FF0000">*</font>
</td>
</tr>
<tr class="tdbg" >
<td width="50%"><strong>年齡:</strong></td>
<td width="50%" align="left">
<asp:TextBox ID="txtAge" runat="server" CssClass="input" Columns="30" MaxLength="50" onblur="javascript:checkAge();void(0);"></asp:TextBox><div id="errorMsg1"></div></td>
</tr>
</table>

</div>
<script language="javascript" type="text/javascript" defer="defer">
function checkName()
{
var name=document.getElementById("<%=txtUserName.ClientID %>");
document.getElementById("errorMsg").style.display="block";
document.getElementById("errorMsg").style.color="red";
document.getElementById("errorMsg").innerText=Test.CheckUserName(""+name.value+"").value;

}

function checkAge()
{
var age=document.getElementById("<%=txtAge.ClientID %>");
document.getElementById("errorMsg1").style.display="block";
document.getElementById("errorMsg1").style.color="red";
document.getElementById("errorMsg1").innerText=Test.CheckAge(parseInt(age)).value;

}
</script>
</form>
</body>
</html>
后臺代碼:Test.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;


/**
* 寫作說明:本文展示了如何利用AjaxPro與服務器交互,并且給服務器傳值的情況。
* 作者:周公
* 日期:2008-1-1
* 首發地址:http://blog.csdn.net/zhoufoxcn/
**/
public partial class Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{

}
AjaxPro.Utility.RegisterTypeForAjax(typeof(Test));//注冊
}
[AjaxPro.AjaxMethod]
public string CheckUserName(string name)
{

if (string.IsNullOrEmpty(name))
{
return "請填寫用戶名";
}
else if (ExistUserName(name))
{
return "該用戶名已被注冊";
}
else
{
return "可以注冊";
}
}
[AjaxPro.AjaxMethod]
public string CheckAge(int age)
{
if (age > 80 || age < 10)
{
return "別忽悠我了";
}
else
{
return "正常范圍";
}
}
//為簡化程序,這里將從數據庫檢查是否有重復的用戶名這一步簡單為一個方法
//可以在這里寫實際的數據庫檢查代碼
private bool ExistUserName(string name)
{
if (name.StartsWith("a") || name.StartsWith("c"))
{
return true;
}
else
{
return false;
}
}
}
說明:在前臺aspx代碼中我們寫了兩個Js方法,負責與服務器的交互,分別是function checkName()和checkAge(),請注意看:
<script language="javascript" type="text/javascript" defer="defer">
function checkName()
{
var name=document.getElementById("<%=txtUserName.ClientID %>");
.......省略無關代碼
document.getElementById("errorMsg").innerText=Test.CheckUserName(""+name.value+"").value;

}

function checkAge()
{
var age=document.getElementById("<%=txtAge.ClientID %>");
.......省略無關代碼
document.getElementById("errorMsg1").innerText=Test.CheckAge(parseInt(age.value)).value;
}
</script>
細心的朋友會發現在后臺Test.cs里就有CheckUserName(string name)和public string CheckAge(int age)兩個方法,在js里我們就是通過Test.CheckUserName()和Test.CheckAge()來調用的,這兩個服務器端方法與平常所熟悉的方法聲明有點不一樣,如下:
[AjaxPro.AjaxMethod]
public string CheckUserName(string name)
{
....//方法體略
}
[AjaxPro.AjaxMethod]
public string CheckAge(int age)
{
....//方法體略
}

其中[AjaxPro.AjaxMethod]表明它們是可以被js代碼所調用的,另外兩個方法需要的參數類型不同,一個是string類型,一個是int類型,而js中數據沒有類型的,因為都是var來聲明的,所以如何把參數值和參數類型傳給服務器還是一個麻煩問題。

查閱了資料,發現可以通過上述的方式解決:
Test.CheckUserName(""+name.value+""),服務器就自動把參數值當字符串類型來識別了;//""+參數值
Test.CheckAge(parseInt(age)),服務器就會把參數當整數來識別了。//parseInt(參數值)

看看運行效果:
出錯效果:


正常效果:

最后,周公還要提醒大家一下,別忘了在Page_Load方法里調用AjaxPro.Utility.RegisterTypeForAjax(typeof(你的aspx頁面所依附的class名稱));這句話。另外有關AjaxPro的介紹請參考網上其它資料。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成在人线av| 91精品国产成人| 亚洲精品第一国产综合精品| 亚洲精品国偷自产在线99热| 91av视频在线免费观看| 欧美成人免费播放| 福利微拍一区二区| 国产婷婷成人久久av免费高清| 第一福利永久视频精品| 欧美激情精品久久久久久| 日韩国产在线播放| 国产精品无av码在线观看| 亚洲丝袜在线视频| 中文字幕9999| 国产欧美婷婷中文| 亚洲www视频| 亚洲第一视频在线观看| 国产国语刺激对白av不卡| 亚洲黄页视频免费观看| 亚洲午夜未删减在线观看| 久久精品99国产精品酒店日本| 日韩黄在线观看| 欧美www视频在线观看| 国产综合香蕉五月婷在线| 欧美一级片一区| 欧美日韩国产一中文字不卡| 国产精品视频网| 2019中文字幕免费视频| 国产精品日日做人人爱| 欧美在线激情视频| 亚洲一区二区三区777| 久久中文字幕在线| 久久国产精品久久久久| 91亚洲人电影| 国产精品一香蕉国产线看观看| 欧美做受高潮1| 亚洲国产日韩欧美综合久久| 青青草精品毛片| 国产区精品在线观看| 亚洲永久免费观看| 欧美在线视频在线播放完整版免费观看| 日韩在线观看成人| 亚洲一区www| 亚洲欧美在线免费| 久久久久国产精品免费| 色诱女教师一区二区三区| 国产69精品久久久久久| 精品亚洲va在线va天堂资源站| 欧美在线视频播放| 色综合男人天堂| 亚洲欧美成人一区二区在线电影| 一本色道久久88综合日韩精品| 亚洲伊人一本大道中文字幕| 日韩一区二区欧美| 亚洲欧美日韩第一区| 午夜精品一区二区三区在线视| 在线精品高清中文字幕| 成人羞羞国产免费| 91精品国产综合久久久久久蜜臀| 欧美一级片久久久久久久| 欧美激情精品久久久久久黑人| 超碰91人人草人人干| 国产香蕉97碰碰久久人人| 亚洲综合精品一区二区| 欧美三级xxx| 久久成人在线视频| 久久久久日韩精品久久久男男| 欧美国产日韩精品| 中文字幕日韩综合av| 45www国产精品网站| 91福利视频在线观看| 亚洲男人天堂网| 日本高清+成人网在线观看| 国产精品xxxxx| 亚洲精美色品网站| 国产91色在线播放| 久久久久女教师免费一区| 欧美又大又粗又长| 在线亚洲午夜片av大片| 中文字幕视频一区二区在线有码| 国产亚洲欧美另类中文| 日韩精品电影网| 日韩精品在线观| 性欧美xxxx交| 国产精品一区久久久| 日韩免费看的电影电视剧大全| 国产精品h片在线播放| 国产日韩欧美成人| 日本欧美黄网站| 国产欧美一区二区三区四区| 57pao国产成人免费| 97成人精品视频在线观看| 97视频网站入口| 一本色道久久综合狠狠躁篇的优点| 午夜精品美女自拍福到在线| 久久人人爽亚洲精品天堂| 欧美日韩另类字幕中文| 欧美视频在线观看免费| 永久免费毛片在线播放不卡| 久久精品这里热有精品| 91精品久久久久| 国产精品久久久91| 国产亚洲欧美aaaa| 国产aⅴ夜夜欢一区二区三区| 色天天综合狠狠色| 另类视频在线观看| 精品免费在线观看| 日韩欧美亚洲成人| 亚洲精品动漫100p| 国产精品普通话| 亚洲美女喷白浆| 国产精品黄色影片导航在线观看| 亚洲欧美日韩精品久久奇米色影视| 日韩欧美亚洲一二三区| 亚洲人成电影网站| 欧美精品成人91久久久久久久| 91影视免费在线观看| 国产精品一区二区女厕厕| 亚洲a∨日韩av高清在线观看| 亚洲精品少妇网址| 欧美一级片在线播放| 久久精品视频va| 亚洲va欧美va在线观看| 精品久久久久国产| 日韩欧美亚洲成人| 日韩亚洲在线观看| 欧美亚洲一级片| 欧美孕妇与黑人孕交| 国产有码在线一区二区视频| 6080yy精品一区二区三区| 国产精品激情自拍| 91高清免费视频| 久久久久久国产三级电影| 九九九热精品免费视频观看网站| 九九热精品在线| 欧美一级电影久久| 国产成人一区二区| 夜夜嗨av一区二区三区四区| 91亚洲精品视频| 国产精品吊钟奶在线| www日韩欧美| 2019亚洲男人天堂| 亚洲精品国精品久久99热| 久久99亚洲热视| 2019最新中文字幕| 亚洲激情视频在线播放| 成人av电影天堂| 日韩美女写真福利在线观看| 成人欧美一区二区三区在线| zzijzzij亚洲日本成熟少妇| 欧美精品情趣视频| xx视频.9999.com| 国产成人一区二| 亚洲欧美日韩高清| 欧美刺激性大交免费视频| 欧美日韩成人在线视频| 欧美一区二区三区艳史| 国产欧美 在线欧美| 欧美成人免费在线视频| 精品国偷自产在线视频| 国产日韩精品视频| 欧美成人免费在线观看| 欧美电影在线观看完整版| 国产精品成av人在线视午夜片|