webform中 ajax调用后台方法(非webservice)
方法一:通过创建一个没有内容的窗体
后台:
public partial class Ajax_ShoppingCart : System.Web.UI.Page
{
bookdbDataContext bdc = Connect.bookdb();
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
if(Request.Form["method"]!=null)
{
switch (Request.Form["method"].ToString())
{
//添加商品至购物车
case "addToCart":
Response.Write(addToCart());
break;
//获得购物车
case "showCart":
Response.Write(showCart());
break;
//从购物车中删除商品
case "removeCart":
Response.Write(removeCart());
break;
//减少购物车中某一商品的数量
case "redCount":
Response.Write(redCount());
break;
//增加购物车中某一商品的数量
case "addCount":
Response.Write(addCount());
break;
default:
break;
}
}
}
} protected string tid
{
get
{
if (Request.Form["tid"] != null)
{
return Request.Form["tid"].ToString();
}
else
{
return "";
}
}
}
/// <summary>
/// 添加至购物车
/// </summary>
/// <returns></returns>
protected string addToCart()
{
int Count = ;
string message = string.Empty;
if (Request.Form["count"] != null)
{
Int32.TryParse(Request.Form["count"].ToString(), out Count);
}
if (Count > || Count < )
{
return JsonConvert.SerializeObject(new { status = , message = "书籍数量不对,不能超过5张哦" });
}
var tic = bdc.Book.SingleOrDefault(obj => obj.ID == Convert.ToInt32(tid));
if (tic != null)
{
Common.Book t = new Common.Book();
t.ID = tid;
t.Count = Count;
t.Name = tic.Name;
t.Price = tic.Price;
int result = ShoppingCartHelper.addCart(t);
switch (result)
{
case -:
return JsonConvert.SerializeObject(new { status = , message = "同一书籍不能购买超过5本哦!" });
case :
return JsonConvert.SerializeObject(new { status = , cart = ShoppingCartHelper.getShoppingCart(), message = "成功加入购物车!" });
default:
return null;
}
}
else
{
return JsonConvert.SerializeObject(new { status = , message = "不存在此书籍,请您重新选择!" });
}
} /// <summary>
/// 获得购物车
/// </summary>
/// <returns></returns>
protected string showCart()
{
return JsonConvert.SerializeObject(new { cart = ShoppingCartHelper.getShoppingCart() });
} /// <summary>
/// 从购物车中移除商品
/// </summary>
/// <returns></returns>
protected string removeCart()
{
int result = ShoppingCartHelper.removeCart(tid);
switch (result)
{
case -:
return JsonConvert.SerializeObject(new { status = , message = "离开太久啦,购物车已经空空了,您重新购买吧" });
default:
return JsonConvert.SerializeObject(new { status = , cart = ShoppingCartHelper.getShoppingCart() });
}
} /// <summary>
/// 减少购物车中某一件商品的数量
/// </summary>
/// <returns></returns>
protected string redCount()
{
int result = ShoppingCartHelper.reduceCart(tid);
switch (result)
{
case -:
return JsonConvert.SerializeObject(new { status = , message = "离开太久啦,购物车已经空空了,您重新购买吧" });
default:
return JsonConvert.SerializeObject(new { status = , cart = ShoppingCartHelper.getShoppingCart() });
}
} /// <summary>
/// 增加购物车中某一件商品的数量
/// </summary>
/// <returns></returns>
protected string addCount()
{
int result = ShoppingCartHelper.addCart(tid);
switch (result)
{
case -:
return JsonConvert.SerializeObject(new { status = , message = "离开太久啦,购物车已经空空了,您重新购买吧" });
default:
return JsonConvert.SerializeObject(new { status = , cart = ShoppingCartHelper.getShoppingCart() });
}
}
}
后台代码
前台:
function ShowNewList(d,t) {
var _url = "/Data_ajax/Ajax_ShoppingCart.aspx";//Data_ajax只是一个文件夹名字,随便怎么取,但是,该页面的aspx界面中,不能出现空格和内容,就是一个空的界面什么对没有
var obj = {
method: "addToCart",
Id: d //在后台可以用Reques.Form["Id"]获取参数值
};
jQuery.ajax({
type: "POST",
url: _url,
data: obj,
dataType: "json",
success: function (x) {
ShowNewList1(x);
}
});
}
前台代码
购物车类:
namespace Ipow.CMS.Helper
{
public static class ShoppingCartHelper
{
/// <summary>
/// 获取购物车
/// </summary>
/// <returns></returns>
public static shoppingCart getShoppingCart()
{
shoppingCart cart = new shoppingCart();
if (HttpContext.Current.Session["cart"] != null)
{
cart = HttpContext.Current.Session["cart"] as shoppingCart;
}
return cart;
} /// <summary>
/// 加入购物车
/// </summary>
/// <param name="tic">门票</param>
/// <param name="CategoryID">门票类别</param>
/// <returns></returns>
public static int addCart(ticket tic, int CategoryID)
{
int result = ;
shoppingCart cart = getShoppingCart();
if (cart.CategoryID == )
{
cart.CategoryID = CategoryID;
cart.TotalPrice = tic.ticketPrice * tic.ticketCount;
List<ticket> list = new List<ticket>();
list.Add(tic);
cart.tickets = list;
}
else
{
if (cart.CategoryID != CategoryID && cart.tickets.Count() != )
{
//不同园区门票不能加入同一个购物车
result = -;
}
else
{
ticket t1 = cart.tickets.SingleOrDefault(obj => obj.ticketID == tic.ticketID);
//如果已存在同样的门票,则增加门票数量
if (t1 != null)
{
if (t1.ticketCount + tic.ticketCount <= )
{
t1.ticketCount += tic.ticketCount;
cart.TotalPrice += tic.ticketPrice * tic.ticketCount;
cart.CategoryID = CategoryID;
}
else
{
//门票数量超过5张
result = -;
}
}
//不存在则添加
else
{
cart.TotalPrice += tic.ticketPrice * tic.ticketCount;
cart.CategoryID = CategoryID;
cart.tickets.Add(tic);
}
}
}
HttpContext.Current.Session["cart"] = cart;
return result;
} /// <summary>
/// 从购物车中移除商品
/// </summary>
/// <param name="tic">要移除的商品ID</param>
/// <returns></returns>
public static int removeCart(string tid)
{
shoppingCart cart = getShoppingCart();
if (cart.CategoryID == )
{
//离开太久啦,购物车已经空空了,您重新购买吧
return -;
}
else
{
ticket t1 = cart.tickets.SingleOrDefault(obj => obj.ticketID == tid);
if (t1 != null)
{
//重新计算总价
cart.TotalPrice -= t1.ticketPrice * t1.ticketCount;
//从购物车中移除
cart.tickets.Remove(t1);
}
}
HttpContext.Current.Session["cart"] = cart;
return ;
} /// <summary>
/// 减少购物车中某一商品的数量
/// </summary>
/// <param name="tic">要减少数量的商品id</param>
/// <returns></returns>
public static int reduceCart(string tid)
{
shoppingCart cart = getShoppingCart();
if (cart.CategoryID == )
{
//离开太久啦,购物车已经空空了,您重新购买吧
return -;
}
else
{
ticket t1 = cart.tickets.SingleOrDefault(obj => obj.ticketID == tid);
if (t1 != null)
{
if (t1.ticketCount > )
{
//从购物车中减少某一商品的数量
t1.ticketCount--;
//重新计算总价
cart.TotalPrice -= t1.ticketPrice;
}
}
}
HttpContext.Current.Session["cart"] = cart;
return ;
} /// <summary>
/// 增加购物车中某一商品的数量
/// </summary>
/// <param name="tic">要减少数量的商品id</param>
/// <returns></returns>
public static int addCart(string tid)
{
shoppingCart cart = getShoppingCart();
if (cart.CategoryID == )
{
//离开太久啦,购物车已经空空了,您重新购买吧
return -;
}
else
{
ticket t1 = cart.tickets.SingleOrDefault(obj => obj.ticketID == tid);
if (t1 != null)
{
if (t1.ticketCount < )
{
//从购物车中减少某一商品的数量
t1.ticketCount++;
//重新计算总价
cart.TotalPrice += t1.ticketPrice;
}
}
}
HttpContext.Current.Session["cart"] = cart;
return ;
}
}
/// <summary>
/// 购物车
/// </summary>
public class shoppingCart
{
/// <summary>
/// 门票类别ID
/// </summary>
public int CategoryID { get; set; }
/// <summary>
/// 总价
/// </summary>
public decimal? TotalPrice { get; set; }
/// <summary>
/// 门票列表
/// </summary>
public List<ticket> tickets { get; set; }
}
/// <summary>
/// 门票
/// </summary>
public class ticket
{
public string ticketID { get; set; }
/// <summary>
/// 门票名称
/// </summary>
public string ticketName { get; set; }
/// <summary>
/// 门票数量
/// </summary>
public int ticketCount { get; set; }
/// <summary>
/// 门票价格
/// </summary>
public decimal? ticketPrice { get; set; }
}
}
购物车类
方法二:在方法上加[Webservice],方法必须是静态,static
后台:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services; namespace WebApplication1.BookManage
{
public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ } [WebMethod]
public static string SayHello(string str,string str2)
{
return str+str2;
}
}
}
1
前台:
Js中:
$(function () {
$("#btnOK").click(function () {
$.ajax({
type: "post",
url: "test.aspx/SayHello",
data: "{'str':'我是','str2':'XXX'}",
contentType: "application/json",
dataType: "json",
success: function (r) {
alert(r.d);
},
error: function (e) {
alert("错误是:" + e.responseText);
}
});
return false;
});
}) 界面:
<form id="form1" runat="server">
<input type="button" value="调用后台方法" id="btnOK"/>
</form>
2
方法三:一般处理程序
前台:
JS:
function strToJson(str) {
var json = eval('(' + str + ')');
return json;
}
$("#btnone").click(function () {
$.ajax({
type:"post",
url: "/Ajax_Data/Handler.ashx",
data: {method:"a"},
dataType: "text",
success: function (r) {
var obj = strToJson(r);
alert(obj.name+" "+obj.age);
},
error: function (e) {
alert("错误:"+e.responseText);
}
});
}); 界面:
<input type="button" value="使用一般处理程序调用后台" id="btnone" />
one
后台:
/// <summary>
/// Handler 的摘要说明
/// </summary>
public class Handler : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
char charmehod = Convert.ToChar(context.Request.Params["method"]);
context.Response.ContentType = "text/plain"; switch (charmehod)
{
case 'a':
context.Response.Write("{name:'魔女小溪',age:'22' }");
break;
case 'b':
context.Response.Write("document.write(\"This is b samply\");");
break;
default:
break;
}
context.Response.Flush(); } public bool IsReusable
{
get
{
return false;
}
}
}
two
webform中 ajax调用后台方法(非webservice)的更多相关文章
- java 中使用ajax调用后台方法注意事项
java 中使用ajax调用后台方法注意事项,后台方法一定要加@ResponseBody jQuery.validator.addMethod("checkRuleName",fu ...
- asp.net如何在前台利用jquery Ajax调用后台方法
一 :最近因为帮同事开发项目使用到了asp.net,而我又想实现Ajax异步请求....从网上查询了一下资料之后,原来在asp.net中利用Ajax调用后台方法同样很简单,为了便于自己以后查看,特将此 ...
- Asp.net中JQuery、ajax调用后台方法总结
通过上一篇文章实例的实现,整个过程当中学习到很多知识点,了解了Jquery.Ajax在asp.net中的运用,加以总结,其实原理都是一样的,理解了一种,其他的注意很少的区别就可以了.灵活运用: 1.有 ...
- webform中ajax.ajaxMethod使用方法
前言 dll文件 如果还没有ajax.dll文件,就先下载一个来 引用 将ajax.dll添加到项目引用中:在VS的解决方案资源管理器中右键点击项目名称--"添加项目引用"--浏览 ...
- asp.net core 的 razor pages 如何使用ajax调用后台方法
Razor 是一种允许您向网页中嵌入基于服务器的代码(Visual Basic 和 C#)的标记语法. 当网页被写入浏览器时,基于服务器的代码能够创建动态内容. 在网页加载时,服务器在向浏览器返回页面 ...
- C#实现简易ajax调用后台方法
在当前WEB当中,有些人都会抛弃asp.net的服务器控件,转而使用ajax来进行数据的交互和存储. 当我们大量使用ajax的时候,对于新手而言,肯定会创建很多的ashx或aspx页面,通过拼接参数, ...
- jquery + ajax调用后台方法
前台js: var parameter = ""; $.ajax({ type: "POST", //提交方式 url: "Default.aspx/ ...
- asp.net core 通过ajax调用后台方法(非api)
1. 在Startup.cs文件中添加: services.AddMvc(); services.AddAntiforgery(o => o.Heade ...
- asp.net ajax 调用后台方法
js代码 <form id="form1" runat="server"> <script language=javascript type= ...
随机推荐
- WinRAR5.31 注册码
RAR registration dataState Grid Corporation Of China50000 PC usage licenseUID=5827a0bd1c43525d0a5d64 ...
- AI 人工智能 探索 (二)
完整被动技能代码 using UnityEngine; using System.Collections; public class AI : MonoBehaviour { private Hash ...
- 留言本,keyCode
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- crontab使用和格式
什么是crontab crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.具体的用法见下图: 关于crontab的格式: crontab的格式是分为6列:f1 f2 ...
- PAT (Advanced Level) 1108. Finding Average (20)
简单模拟. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...
- mysql笔记7之数据类型
1 区别一: varchar:可变长度的字符串.根据添加的数据长度决定占用的字符数 char:固定长度的字符串 2区别二 int:没有限制 int(4):限制为4 3 区别三: 日期: date ...
- Windows API 之 InternetOpen、InternetOpenUrl、InternetReadFile
InternetOpen: Initializes an application's use of the WinINet functions. HINTERNET InternetOpen( _In ...
- GIT问题,error:src refspec master does not match any
将本地GIT版本库PUSH到一个GITHUB上一个空的版本库时可能会出现如下错误error:src refspec master does not match any原因: 本地版本库为空, 空目录不 ...
- String转float
float mTotalhour = Float.parseFloat(mTotalHourEt.getText().toString().trim());
- 【转】在 2016 年做 PHP 开发是一种什么样的体验?(一)
原文: https://www.v2ex.com/t/312651 在 2016 年做 PHP 开发是一种什么样的体验?(一) 嘿,我最近接到一个网站开发的项目,不过老实说,我这两年没怎么接触编程,听 ...