成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何利用ASP.NET MVC保存電子商務網站用戶信息

開發 后端
ASP.NET MVC用于構建電子商務網站,其中將涉及到保存用戶信息的問題。我們的解決方案依舊是使用Ajax來實現。那有幾種操作方法呢?請看本文。

電子商務網站支付功能頁面往往會有很多信息,對于這些信息的保存,往往是分步完成的,那么使用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.         object jsonData = serializer.DeserializeObject(json);  
  11. return serializer.Deserialize<T>(json);  
  12.     }  
  13.  } 

我們繼承IModelBinder接口,實現其 方法:

  1. public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 

即可。我們可以在Action里面這樣使用:

  1. public ActionResult Test1([ModelBinder(typeof(JsonBinder<ReceiverInfo>))] ReceiverInfo receiverInfo) 

這樣我們自定義的 IModelBinder就會取代DefaultModelBinder完成數據綁定。

3、直接傳遞一個Json對象

上面兩種方法并沒有利用MVC的System.ComponentModel.DataAnnotations進行有效的數據驗證。您可能需要自己手動驗證,無疑增加了工作量。

我們試試這種方式。

前端的寫法

  1. var b = {      
  2. ReceiverId: 5,      
  3. ReceiverName: "will",      
  4. Sex: "F",      
  5. CreateDate: "2011-02-21"};$.ajax({    
  6. url: "/Home/test1",      
  7. type: "post",      
  8. cache: false,      
  9. data: b,      
  10. success: function(data) { alert(data.message); },      
  11. error: function(xhr, a, b) { alert  
  12. (xhr.responseText); }}); 

Action的寫法:

  1. public ActionResult Test1(ReceiverInfo receiverInfo) 

我們能正常的得到綁定后的數據。而且我們還能利用System.ComponentModel.DataAnnotations進行數據驗證。我們為ReceiverInfo做如下改動:

  1. [System.ComponentModel.DataAnnotations.Required  
  2. (ErrorMessage = "收貨人必須填寫")]public string ReceiverName { getset; } 

并在前端為ReceiverName賦值為空字符串,再次執行,得到提示:

很好,不過我們有新的要求了,那就是傳遞更復雜的對象,比如對象套嵌對象,對象有集合屬性,這種方式不能勝任了。

4、利用MvcFutures的JsonValueProviderFactory

每一版的MVC都有一個MvcFutures,里面會有一些額外的功能,這些功能有些會加入下一個版本中,而這些功能在某些時候很有用處。我查看了里面的類,發現有一個類JsonValueProviderFactory正是處理復雜對象的提交和數據驗證。由于json對象需要特定解析才能使用默認的DefaultModelBinder,而這個解析過程需要在ValueProvider階段完成,所以需要實現特定的ValueProvider給DefaultModelBinder。我們需要實現一個ValueProviderFactory和IValueProvider,而MVC里面的DictionaryValueProvider<TValue>(繼承了IValueProvider)已經足夠使用了,所以只需要繼承ValueProviderFactory實現其方法:public override IValueProvider GetValueProvider(ControllerContext controllerContext)即可,具體代碼您可以看JsonValueProviderFactory。

我們定義另一個類:

ReceiverInfoChild

  1. public class ReceiverInfoChild{      
  2. [System.ComponentModel.DataAnnotations.Required  
  3. (ErrorMessage = "ChildId必須填寫")]      
  4. public string ChildId { getset; }} 

并為類ReceiverInfo增加一個屬性public List<ReceiverInfoChild> ReceiverInfoChild { get; set; }

我們把JsonValueProviderFactory拿出來放在項目里面,然后在Global.asax里面注冊一下,就可以使用了。

  1. protected void Application_Start(){      
  2. AreaRegistration.RegisterAllAreas();      
  3. RegisterRoutes(RouteTable.Routes);      
  4. ValueProviderFactories.Factories.Add(new   
  5. JsonValueProviderFactory());} 

因為JsonValueProviderFactory中有:if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))來判斷進來的請求是不是json對象,所以我們提交數據的時候需要這樣寫:

  1. var ReceiverInfo = [              
  2. {                  
  3. ReceiverInfoChild: [{ ChildId: "1" }, { ChildId: "11"}],                  
  4. ReceiverId: 5,                
  5. ReceiverName: "will",                
  6. Sex: "F",                  
  7. CreateDate: "2011-02-21"            
  8.   },              
  9. {                 
  10.  ReceiverInfoChild: [{ ChildId: "2" }, { ChildId: "22"}],                  
  11. ReceiverId: 5,                
  12. ReceiverName: "will",                
  13. Sex: "F",                  
  14. CreateDate: "2011-02-21"            }             
  15.  ];$.ajax({    
  16. url: "/Home/test1",    
  17. type: "post",    
  18. cache: false,    
  19. contentType: "application/json;charset=utf-8",    
  20. data: JSON.stringify(ReceiverInfo),    
  21. success: function(data) { alert(data.message); },   
  22.  error: function(xhr, a, b) { alert(xhr.responseText); }}); 

其中JSON.stringify(ReceiverInfo)是將json對象轉換成字符串,您可以到這里下載該類庫。

在Action里面,我們這樣寫就可以了:

  1. public ActionResult Test1(List<ReceiverInfo> receiverInfo) 

看一下調試的結果:

完全正常綁定了值。我們再看看數據驗證:


至此,我們實驗了四種方案:

第一種方案,最麻煩,而且容易出錯(可能跟我個人不喜歡拼接字符串有關系);

第二種方案,有一定的通用性,但是不利于數據驗證;

第三種方案,通用,可以進行有效的數據驗證,應對一般的需求夠用了,但是處理更復雜的對象不行;

第四種方案,幾乎可以處理我們遇到的所有情況

另外,這是在ASP.NET MVC2中的使用,到了ASP.NET MVC3,微軟已經把JsonValueProviderFactory作為內置的功能了。

原文鏈接:http://www.cnblogs.com/WillMeng/archive/2011/03/01/json_binding_validate.html

【編輯推薦】

  1. 詳解ASP.NET MVC 3 beta新特性
  2. ASP.NET MVC 3讓依賴注入實現得更簡單
  3. 詳解ASP.NET MVC 3 beta新特性
  4. ASP.NET MVC 3新特性與NuPack功能詳解
  5. .NET開發人員應該關注的七個開源項目
【責任編輯:彭凡 TEL:(010)68476606】
責任編輯:彭凡 來源: 博客園
相關推薦

2009-07-24 10:46:00

ASP.NET MVC

2009-07-28 13:21:27

2009-07-28 13:47:47

ASP.NET電子商務ASP.NET購物車

2009-07-28 13:06:19

ASP.NET電子商務

2012-01-17 10:37:25

2016-04-28 09:47:31

2010-09-03 09:33:53

2010-01-05 11:02:30

2009-08-14 14:05:52

購物環境釣魚網站SSL

2009-04-16 11:14:49

Linux阿里巴巴電子商務

2010-01-11 10:55:09

2012-01-16 12:09:21

2009-12-18 16:51:41

ASP.NET概述

2011-12-07 09:35:14

電子商務網宿科技

2009-07-01 18:30:51

JSP開發電子商務網站

2009-08-03 14:15:24

ASP.NET系統用戶

2011-07-25 16:09:29

2009-11-04 10:20:04

樂合網

2009-07-02 17:22:05

2009-07-31 12:43:59

ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区视频 | 欧美日韩亚洲三区 | 成人精品一区二区三区四区 | 国精产品一区二区三区 | 免费看啪啪网站 | 男女下面一进一出网站 | 中文字幕日韩一区二区 | 国产精品亚洲一区二区三区在线 | 久久大陆 | 欧美在线a | 久久精品一区二区三区四区 | 一级a性色生活片久久毛片 午夜精品在线观看 | 色婷婷av一区二区三区软件 | 精品色| 日韩中文字幕免费在线 | 日韩精品视频在线免费观看 | 色综合天天天天做夜夜夜夜做 | 日韩精品一区二区三区四区视频 | 日日夜夜天天 | 91精品国产91久久久久久不卞 | 人人射人人草 | 久久成人国产精品 | 精品一二三区在线观看 | 精品国产一区久久 | 色接久久 | av网站在线播放 | 亚洲欧洲日本国产 | 日韩三级视频 | 91久久精品国产免费一区 | 亚洲h视频 | 一级特黄色毛片 | 亚洲中午字幕 | av在线免费观看网站 | 看一级毛片| 亚洲精品大全 | 91av免费观看| 日韩高清黄色 | 夏同学福利网 | 黄色片免费看 | 亚洲成av人片在线观看无码 | 国产精品视频一二三区 |