上一篇asp.net Ajax 值错误处理简单的描述了asp.net下Ajax的错误处理。这一篇主要说一下Ajax的数据传递。主要从三种形式实现数据的回传。1、使用客户端WebReqest对象也是就.ashx文件;2、使用页面的静态函数;3、使用WebService。
一、使用WebReqest对象处理数据传递。
1、创建一个.ashx文件,在实现IHttpHandler接口的ProcessRequest(HttpContext context)中写一段测试代码如下:
context.Response.ContentType = "text/plain";
string text = context.Request.Params["text"];
JavaScriptSerializer jss = new JavaScriptSerializer();
context.Response.Write(jss.Serialize(text));
接下来在页面中
<script language="javascript" type="text/javascript">
function onComplete(response)
{
if (response.get_responseAvailable())
{
var text = response.get_object();
alert(text);
}
}
function AjaxRequest(text)
{
var request = new Sys.Net.WebRequest();
request.set_url('test.ashx');
request.set_httpVerb("POST");
request.add_completed(onComplete);
request.set_body('text='+encodeURIComponent(text));
request.invoke();
}
</script>
<input type="button" value="Test" onclick="AjaxRequest('Hello,This is a test!')" />
二、使用页面的静态函数。为什么一定要使用静态函数,我不得而知,但老赵的博客中好像有关于不用static函数的文章,有兴趣的可以去找找看看。在使用该方式前,先要设置一下ScriptManager控件的EnablePageMethods="true"属性。废话不多了,请看页面代码:
<asp:ScriptManager ID="sm7" runat="server" EnablePageMethods="true"></asp:ScriptManager>
<script type="text/javascript" language="javascript">
function CallBackResult(value)
{
alert(value);
}
function ExcuteAjax(text)
{
PageMethods.AjaxTest(text,CallBackResult);
}
</script>
<input type="button" value="submit" onclick="ExcuteAjax('this is a test!')" />
在后台页面,只是一个非常简单的静态的测试函数,当然我在函数表明WebMethod属性:
[WebMethod]
public static string AjaxTest(string str)
{
return "Holle " + str;
}
三、使用WebService。要使用WebService首要的任务就是在ScriptManager控件中配置WebService的地址,比如在根目录下创建了一个WebServiceTest.asmx。那么ScriptManager控件的配置如下:
<asp:ScriptManager ID="sm8" runat="server">
<Services>
<asp:ServiceReference Path="~/WebServiceTest.asmx" InlineScript="false" />
</Services>
</asp:ScriptManager>
当然如果想应用多个WebService,那么就多添加几条。接下来就是在页面中写一些js代码了:
<script language="javascript" type="text/javascript">
function AjaxTest(text)
{
testajax.ajaxTest.WebServiceTest.ReturnValue(text,show);
}
function show(value)
{
alert(value);
}
</script>
<input type="button" value="Test" onclick="AjaxTest('This is a test!')" />
其中的testajax.ajaxTest是WebServiceTest.asmx的命名空间,同理在WebServiceTest.asmx文件中也只有很简单的测试代码如下,但是别忘了设置一下WebMethod属性和ScriptMothod属性:
[WebMethod]
[ScriptMethod]
public string ReturnValue(string str)
{
return "Hi," + str;
}