有这样一个需求,当客户输入卡号,查询出客户的金额,如果金客大于等于1000,提示询问客户是否对帐,如果客户选择对帐,就改对客户数据进行对帐操作(其实就是改丢这个客户的对帐标志),前提是在B/S架构下实现这个功能。
当看到这个需求时,先分解一下,来弄清数据的层次和操作的层次。
首先数据肯定是在服务器端存放,客户端需要的数据都需要从服务端得到。操作层次是客户先把卡号送到服务端,让服务判断用户金客是否大于等于1000,如果不满足条件,就向客户端提示用户金客不足1000,不能对帐,如果满足条件,就向客户端询问用户是否对帐,如果客户选择确定对帐,就让服务端更新数据标志,如果客户选择不对帐,流程就此完结。
现在从技术角度分析一下这个过程,B/S架构是基于HTTP协议,这个协议的特点是B端有请求,S端才有回应,一问一答的形式,当然不问,也就不答。现在就基于HTTP来考虑一下,当客户端提交卡号时,是客户端的第一次请求;服务端得到卡号从数据库中得到金额,然后跟据金额是否大于等于1000来向用户发送不同的请求,如果客户端大于等于1000,向客户端发的应答是带有询问提示框的,并有二次请求代码,如果客户金额少于1000,应答的是一个提示金额不足的代。
提下来的焦就是怎么在第一次应答中,带有第二次请求的代码,这里的代码是请求的代码,一定是在客户端,也当然是脚本代码了。
html xmlns="http://www.w3.org/1999/xhtml">
<form id="form1" runat="server">
<input type="hidden" name="mark" />
<script language="javascript" type ="text/javascript">
document.all.mark.value = "mark_value";
<asp:TextBox ID="Number_TB" runat="server"></asp:TextBox>
<asp:Button ID="Sub_But" runat="server" OnClick="Sub_But_Click" Text="提交"
在aspx中用一个Hide标签,是用来存放标志的,在第二次客户端提交是应用。
PostPage方法是客户端向后台提交请求的代码。
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
public partial class Test : System.Web.UI.Page
string constr = @"server=.\sqlexpress;database=testdb;uid=sa;pwd=sa;";
protected void Page_Load(object sender, EventArgs e)
string mark = Request.Form["mark"] != null ? Request.Form["mark"] : "";
if (mark == "mark_value")
string SQL = "update member set accmark=1 where number=@number";
SqlConnection con = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand();
cmd.Parameters.Add("@number", SqlDbType.VarChar).Value = Number_TB.Text;
this.ClientScript.RegisterStartupScript(this.GetType(), "messages", "<script>alert('更新异常!')</script>");
protected void Sub_But_Click(object sender, EventArgs e)
string SQL = "select amount from member where number=@number and accmark=0";
SqlConnection con = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand();
cmd.Parameters.Add("@number", SqlDbType.VarChar).Value = Number_TB.Text;
amount = Convert.ToDouble(cmd.ExecuteScalar());
this.ClientScript.RegisterStartupScript(this.GetType(), "message", "<script>alert('查询异常!')</script>");
//下面的代码是调用二次请求的代码,用confirm来提示用户做判断
string s = " <script language='javascript'>if(confirm('您的金额为:" + amount + "元,确定要对帐吗?')){ PostPage(); }</script>";
this.ClientScript.RegisterStartupScript(this.GetType(), "clientScript", s);
string s = " <script language='javascript'>alert('您的金额不足1000元');</script>";
this.ClientScript.RegisterStartupScript(this.GetType(), "clientScript", s);
本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/164269 ,如需转载请自行联系原作者