一、前言
以前在做项目的时候遇到asp.net前后台通过AJAX传递数据,当时做完了,自己一直没有总结,虽说上手快,但是还是要总结一下,以供以后的学习,思考。
二、要点分析
asp.net的前台可以通过按F7进入后台,但是要想通过AJAX在后台捕获AJAX传过来的参数的时候就要添加[WebMethod] ,才可以。不过可以在asp.net捕获AJAX使用很多的是用“一般处理程序”来完成。具体操作看下文。
三、使用方案
在这里小编给出两种方案来实现数据的传递:
方案一 直接调用后台
前台:
<%--引入JQuery--%>
<script src="js/jquery-2.1.1.min.js"></script>
<%--向后台利用AJAX传递参数,调用后台参数--%>
<script type="text/javascript">
$(function () {
<%--当txtUserName失去焦点的时候触发--%>
$('#txtUserName').blur(function () {
var username = $(this).val();
$.ajax({
type: "post",
contentType: "application/json",//传值的方式
url: "index.aspx/GetValueAjax",//WebAjaxForMe.aspx为目标文件,GetValueAjax为目标文件中的方法
data: "{username:'" + username + "'}",//username 为想问后台传的参数(这里的参数可有可无)
success: function (result) {
alert(result.d);//result.d为后台返回的参数
}
})
})
})
</script>
<input id="txtUserName" type="text" />
后台:一定要添加[WebMethod]
[WebMethod]//方法前边必须添加 [WebMethod]
public static string GetValueAjax(string username)//这个方法需要是静态的方法要用到关键字static
{
//在这里可以对传进来的参数进行任何操作
return username;
}
方案二 一般处理程序
创建一般处理程序ajaxtest.ashx后,完成如下操作:
前台:
<%--引入JQuery--%>
<script src="js/jquery-2.1.1.min.js"></script>
<%--使用AJAX向一般处理程序传递参数,调用函数--%>
<script type="text/javascript">
$(function () {
<%--当txtYiBan失去焦点的时候触发--%>
$('#txtYiBan').blur(function () {
var username = $(this).val();
$.ajax({
type: "GET",
url: "ajaxtest.ashx?json=" + username,//ajaxtest.ashx为目标文件
dataType: "text",
success: function (result) {
alert(result.d);//result.d为后台返回的参数
}
})
})
})
</script>
<input id="txtYiBan" type="text" />
ajaxtest.ashx 一般处理程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.SessionState;
namespace aspAjaxTest
{
/// <summary>
/// ajaxtest 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class ajaxtest : IHttpHandler
{
HttpContext Context;
/// <summary>
/// 获取传的值,并调用其他的方法
/// </summary>
/// <param name="context"></param>
public void ProcessRequest(HttpContext context)
{
Context = context;
context.Response.Clear();
context.Response.ContentType = "text/html; charset=utf-8";
//获取传来的值
string methodName = GetQueryString("json");
//可以调用其他方法------看下文
}
/// <summary>
/// 获取传的值
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
string GetQueryString(string name)
{
//获取传的值
return Context.Request.Params[name];
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
可以调用的方法:
private string GetJsonStr(string methodName, string session, string strname, string Userid, string strWhere)
{
string jsonString = "";
switch (methodName)
{
case "GetWorksContent": //调用分页的效果
jsonString = new JCZB.YMGJ.Web.Web.WebManager.home.AddHistory().GetRMContent(session);
//jsonString = "1";
break;
case "GetWorkssetContent": //调用分页的效果
jsonString = new JCZB.YMGJ.Web.Web.WebManager.home.worksset().GetRMContent(session,strname,Userid);
break;
case "GetWorkContent": //调用分页的效果
jsonString = new JCZB.YMGJ.Web.Web.WebManager.home.works().GetRMContent(session, strWhere);
break;
case "GetWorkssetByTimeContent": //调用分页的效果
jsonString = new JCZB.YMGJ.Web.Web.WebManager.home.workssetByTime().GetRMContent(session, strname, Userid);
break;
case "GetWorkssetByPositionContent": //调用分页的效果
jsonString = new JCZB.YMGJ.Web.Web.WebManager.home.workssetByPosition().GetRMContent(session, strname, Userid);
break;
case "GetWorkssetByArtistidContent": //调用分页的效果
jsonString = new JCZB.YMGJ.Web.Web.WebManager.home.workssetByArtistid().GetRMContent(session, strname, Userid);
break;
}
return jsonString;
}
四、学到什么
- 在aspx的后台可以用如下的方式来捕获参数:
workstateValue = Request.QueryString["workstateValue"];
- 在一般处理程序中可以用:
return Context.Request.Params[name];
四、小结
这些都是比较常用的,无论是任何语言,一定要以虔诚的心态去学习,这样才能提高自己的熟练度,不至于忘记了怎么做。加油!学习要心细。