日期:2010-01-26  浏览次数:20430 次

电子商务网站支付功能页面往往会有很多信息,对于这些信息的保存,往往是分步完成的,那么使用Ajax最合适不过了,比如其中的收货人信息模块。这些信息的新建和编辑保存都是用Ajax来完成的。那么有几种方式完成这个操作呢,我想到如下几种。

先来看看该功能的截图:

一般情况下这些信息会对应一个实体类,就命名为:ReceiverInfo,简单起见,我定义ReceiverInfo如下:

1、将需要的值拼接成json文本,再Action里面处理

首先您需要将要保存的值拼接成一个json文本,类似:

  1. var test = "{ ReceiverId: 5, ReceiverName: "will", Sex: "F", CreateDate: "2011-02-21" }"

然后用Jquery保存到数据库,代码如下:

  1. $.ajax({    
  2. url: "/Home/test1",    
  3. type: "post",    
  4. cache: false,    
  5. data: test}); 

然后您在Action里面这样操作:

  1. StreamReader reader = new StreamReader(Request.InputStream);  
  2. string bodyText = reader.ReadToEnd();  
  3. JavaScriptSerializer js = new JavaScriptSerializer();  
  4. ReceiverInfo receiver = js.Deserialize<ReceiverInfo>(bodyText);  
  5. //保存。。。 

2、利用自定义的ModelBinder实现

JsonBinder

  1. public class JsonBinder<T> : IModelBinder   
  2. {   
  3.  public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)   
  4.    {   
  5.     StreamReader reader = new StreamReader(controllerContext.HttpContext.Request.InputStream);   
  6.      string json = reader.ReadToEnd();   
  7.        if (string.IsNullOrEmpty(json))   
  8.             return json;  
  9.          JavaScriptSerializer serializer = new JavaScriptSerializer();  
  10.