【Asp.net】使用Ajax和Jquery在前臺向後臺傳引數並返回值的例項
阿新 • • 發佈:2019-01-06
一、前言
以前在做專案的時候遇到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];
四、小結
這些都是比較常用的,無論是任何語言,一定要以虔誠的心態去學習,這樣才能提高自己的熟練度,不至於忘記了怎麼做。加油!學習要心細。