整合jQuery UI 與ASP. NET Web Form - 2

by vivid 2. 七月 2014 02:53

.NET Magazine國際中文電子雜誌
者:許薰尹
稿:張智凱
文章編號:N140715001
出刊日期:2014/7/2
開發工具:Visual Studio 2013 Ultimate Update 2
版本:.NET Framework 4.5.5x

這一篇文章將延續系列文章第一篇《整合jQuery UI 與ASP. NET Web Form - 1》的情境,介紹如何整合ASP.NET Web伺服器控制項與jQuery UI。此篇文章將強調如何整合jQuery UI與服務導向程式,如Web Service、WCF與ASP.NET Web API。

 

TextBox伺服器控制項- autocomplete

TextBox伺服器控制項產生出Input標籤(根據TextMode 屬性的設定,產生type=text、type=number…等等不同的Input欄位),可以和許多jQuery UI的Widget做整合。例如你想要設計一個google Search首頁一般,在文字方塊中,輸入關鍵字,就從伺服端把與關鍵字相關的文字清單,呈現在文字方塊下方,供使用者選取,以完成資料輸入功能。我們可以利用jQuery UI的autocomplete Widget,整合ASP.NET伺服端程式來達到這樣的效果。伺服端的設計方式有很多種,以下分別探討使用各種不同的伺服端技術來進行設計。

使用ASPX網頁提供建議清單

我們利用ASP.NET Web Form(Server1.aspx)來接收請求,並送出自動完成所需的建議清單資料。若使用者送出參數「A」,就從字串陣列中,下LINQ查詢,把A開頭的所有使用者名稱序列化為字串後,送到呼叫端:

<%@ Page Language = "C#" %>

<script runat = "server">

    protected void Page_Load( object sender , EventArgs e ) {
        var term = Request.Params[0].ToUpper();
        Response.ContentType = "application/json";
        string []  list = new string[]{ "Aries","Mary","Mellisa","Candy","Coco","Jo"};
        var resp = from s in list where s.ToUpper().StartsWith(term) select s;
        string json = Newtonsoft.Json.JsonConvert.SerializeObject( resp );
        Response.Write( json );
    }
</script>

 

在這個範例中,使用JsonN.NET自行撰寫序列化程式碼,將資料轉成JSON格式,更多關於JsonN.NET的使用請參考:「http://json.codeplex.com/」。

若執行這個網頁,在URL指定查詢字串如下:

http://localhost:1317/Server1.aspx?term=A

執行結果請參考下圖所示:

clip_image002

圖 1:使用ASPX網頁提供建議清單。

若執行這個網頁,在URL指定查詢字串如下:

http://localhost:1317/Server1.aspx?term=m

則查詢出所有M開頭的使用者名稱後回傳,請參考下圖所示:

clip_image004

圖 2:使用ASPX網頁提供建議清單。

讓我們來寫一個用戶端程式叫用Server1.aspx取回JSON字串。參考以下範例程式碼,使用TextBox伺服器控制項搜集使用者輸入的關鍵字,並在jQuery的ready事件之中,叫用.autocomplete()方法,擴充TextBox,使用擁有自動完成功能。Autocomplete Widget的source屬性用來設定自動完成的資料來源,它可以指定成一個callback function,接收兩個參數request與response。Request物件包含一個term屬性,儲存目前文字方塊中輸入的值。而response是一個callback function,需要傳入一個引數代表要顯示的建議資料清單。

<%@ Page Language = "C#" %>

<!DOCTYPE html>

<script runat = "server">
</script>

<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
    <title> </title>
    <link href = "Content/themes/sunny/jquery-ui.css" rel = "stylesheet" />
    <style>
   
    </style>
</head>
<body>
    <form id = "form1" runat = "server">
        <div>
            <asp:TextBox ID = "TextBox1" runat = "server"> </asp:TextBox>
        </div>
    </form>
    <script src = "Scripts/jquery-2.0.3.min.js"> </script>
    <script src = "Scripts/jquery-ui.min.js"> </script>
    <script>
        $(function () {
            $("#TextBox1").autocomplete({
                source: function (request, response) {
                    $.getJSON("Server1.aspx", {
                        term: request.term
                    }, response);
                }
            });
        });
    </script>
</body>
</html>

 

這個範例的執行結果請參考下圖所示,執行時,只要輸入「a」,就會自動列出A開頭的所有員工名稱:

clip_image006

圖 3:autocomplete Widget。

輸入「M」,就會自動列出A開頭的所有員工名稱,請參考下圖所示:

clip_image008

圖 4:autocomplete Widget。

上述的這段getJSON程式也可以改寫如下,將得到一樣的執行結果:

<script>
     $(function () {
         $("#TextBox1").autocomplete({
             source: function (request, response) {
                 $.getJSON("Server1.aspx", {
                     term: request.term
                 }, function (data) {
                     response(data)
                 });
             }
         });

     });
</script>

 

使用Web Service提供建議清單

若懶得處理伺服端資料序列化等煩瑣的事情,你也可以選擇使用服務導向程式來提供Autocomplete建議清單。你可以選擇Web服務、WCF服務或ASP.NET Web API來實做這個功能。接下來我們分別探討這三種服務的整合方式。首先來看看Web 服務。參考以下的WebService.asmx程式,其中包含一個標識[WebMethod] Attribute的GetData方法,用來回傳Autocomplete建議清單:

<%@ WebService Language = "C#" Class = "WebService" %>

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Linq;

[WebService( Namespace = "http://tempuri.org/" )]
[WebServiceBinding( ConformsTo = WsiProfiles.BasicProfile1_1 )]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

    [WebMethod]
    public System.Collections.Generic.List<string> GetData( string term ) {
        var t = term.ToUpper( );
        System.Collections.Generic.List<string> data =
            new System.Collections.Generic.List<string>( );
        data.Add( "Aries" );
        data.Add( "Mary" );
        data.Add( "Mannie" );
        data.Add( "Sussi" );
        var r = ( from s in data where s.ToUpper( ).StartsWith( t ) select s ).ToList( );
        return r;
    }
}

 

特別注意Web服務類別的上方標示了[ScriptService] Attribute,如此才可以透過用戶端的jQuery程式進行呼叫,通常資料交換時會採用JSON格式的內容。服務的程式碼和上一個ASPX範例雷同,當接收到叫用GetData方法的請求,便從term參數取得使用者輸入的關鍵字,若使用者送出參數「A」,就從字串集合中,下LINQ查詢,把A開頭的所有使用者名稱查詢出來,並將滿足查詢條件的建議清單送到呼叫端。

用戶端的ASPX網頁程式參考如下,在這個範例中,改用jQuery的ajax方法叫用Web服務,傳送使用者輸入的關鍵字到服務的GetData方法,並將取回的清單資料(data.d)傳入Response方法,以整合jQuery UI的Autocomplete功能:

<%@ Page Language = "C#" %>

<!DOCTYPE html>

<script runat = "server">

  
</script>

<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
    <title> </title>
    <link href = "Content/themes/sunny/jquery-ui.css" rel = "stylesheet" />
    <style>
   
    </style>
</head>
<body>
    <form id = "form1" runat = "server">
        <div>
            <asp:TextBox ID = "TextBox1" runat = "server"> </asp:TextBox>
        </div>
    </form>
    <script src = "Scripts/jquery-2.0.3.min.js"> </script>
    <script src = "Scripts/jquery-ui.min.js"> </script>
    <script>
        $(function () {
            $("#TextBox1").autocomplete({
                source: function (request, response) {
                    var data = {
                        term: request.term
                    };
                    $.ajax({
                        type: "POST",
                        url: "WebService.asmx/GetData",
                        dataType: 'json',
                        contentType: "application/json; charset=utf-8",
                        data: JSON.stringify(data),
                    }).success(function (data) {
                        response(data.d);
                    }).fail(function () {
                        alert("failed");
                    });
                }
            });

        });
    </script>
</body>
</html>

 

這個範例的執行結果請參考下圖所示,當使用者輸入關鍵字,如「m」,就將所有M開頭的字串回傳,提供給文字方塊做為建議清單:

clip_image010

圖 5:autocomplete Widget。

WCF服務

Windows Communication Foundation (WCF) 可以建立服務、裝載服務、使用服務,它是現今程式開發師經常會提及的分散式運算的一種機制。WCF是微軟推出的,希望能以簡單的方式來建立與使用服務。讓程式開發人員只要專注在服務提供的功能與使用的應用程式,不需要去煩惱底層的溝通協定,或傳輸安全的問題。

WCF 服務若要裝載在Web伺服器上,可以於ASP.NET的專案中加入一個svc檔案,使用ServiceHost指示詞描述要裝載的服務名稱,例如以下的Service.svc檔案,用來裝載「Service」服務,服務的程式碼置於Service.cs檔案之中:

<%@ ServiceHost Language = "C#" Debug = "true" Service = "Service" CodeBehind = "~/App_Code/Service.cs" %>

WCF提供webHttpBinding能讓WCF以JSON或POX格式的訊息,使用HTTP來叫用WCF服務,此程式設計模型一般被稱之為RESTful 模型,以存取Web的方式來存取WCF服務,便於利用瀏覽器或其它應用程式來使用到服務。

若使用webHttpBinding,WCF服務可以利用WebGet與WebInvoke Attribute來開放存取,這些Attribute指明能夠存取服務的HTTP動詞、訊息格式..等等資訊。兩者說明如下:

  • l WebGet:WebGet能夠讓服務的作業(Operation)透過HTTP Get動詞來存取。叫用服務作業所須的參數部分可以查詢字串方式傳遞。
  • l WebInvoke:WebInvoke能夠讓服務的作業(Operation)透過HTTP POST、PUT、DELETE動詞來存取。預設使用的是POST。

IService服務合約

我們設計一個服務合約,定義如下(IService.cs),GetData方法上方標示[WebInvoke] Attribute,利用ResponseFormat指定回應的訊息格式為JSON:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService" in both code and config file together.
[ServiceContract]
public interface IService {
  [OperationContract]
  [WebInvoke( Method = "POST" ,
BodyStyle = WebMessageBodyStyle.Wrapped ,
ResponseFormat = WebMessageFormat.Json )]
  System.Collections.Generic.List<string> GetData( string term );
}

 

 

Service服務實作

Service服務實作如下,當接收到叫用GetData方法的請求,便從term參數取得使用者輸入的關鍵字,利用LINQ查詢,篩選滿足查詢條件的建議清單,然後送到呼叫端。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service" in code, svc and config file together.
public class Service : IService {

  public System.Collections.Generic.List<string> GetData( string term ) {
    var t = term.ToUpper( );
    System.Collections.Generic.List<string> data =
        new System.Collections.Generic.List<string>( );
    data.Add( "Aries" );
    data.Add( "Mary" );
    data.Add( "Mannie" );
    data.Add( "Sussi" );
    var r = ( from s in data where s.ToUpper( ).StartsWith( t ) select s ).ToList( );
    return r;
  }
}

 

服務組態

再來你需要在網站web.config檔案,設定服務組態如下,服務使用webHttpBinding,此外在endpointBehaviors區段behavior下設定了使用webHttpBehavior,以便將訊息格式化成JSON格式:

<system.serviceModel>
    <protocolMapping>
      <remove scheme = "http" />
      <add scheme = "http" binding = "webHttpBinding" />
    </protocolMapping>
    <behaviors>
      <endpointBehaviors>
        <behavior name = "">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name = "">
          <serviceMetadata httpGetEnabled = "true" httpsGetEnabled = "true" />
          <serviceDebug includeExceptionDetailInFaults = "false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled = "true" multipleSiteBindingsEnabled = "true" />
  </system.serviceModel>

 

用戶端網頁

服務設計完成之後,我們就可以在用戶端網頁叫用WCF服務了。參考以下ASPX網頁程式,在這個範例中,使用jQuery的ajax方法叫用WCF服務,傳送使用者輸入的關鍵字到服務的GetData方法,並將取回的清單資料(data. GetDataResult)傳入Response方法,以整合jQuery UI的Autocomplete功能:

<%@ Page Language = "C#" %>

<!DOCTYPE html>

<script runat="server">
 
</script>

<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
    <title> </title>
    <link href = "Content/themes/sunny/jquery-ui.css" rel = "stylesheet" />
    <style>
   
    </style>
</head>
<body>
    <form id = "form1" runat = "server">
        <div>
            <asp:TextBox ID = "TextBox1" runat = "server"> </asp:TextBox>
        </div>
    </form>
    <script src = "Scripts/jquery-2.0.3.min.js"> </script>
    <script src = "Scripts/jquery-ui.min.js"> </script>
    <script>
        $(function () {
            $("#TextBox1").autocomplete({
                source: function (request, response) {

                    var data = {
                        term: request.term
                    };
                    $.ajax({
                        type: "POST",
                        url: "Service.svc/GetData",
                        dataType: 'json',
                        contentType: "application/json; charset=utf-8",
                        data: JSON.stringify(data),
                    }).success(function (data) {
                        response(data.GetDataResult);
                    }).fail(function () {
                        alert("failed");
                    });
                }
            });

        });
    </script>
</body>
</html>

 

這個範例的執行結果請參考下圖所示,當使用者輸入關鍵字,如「s」,就將所有S開頭的字串回傳,提供給文字方塊做為建議清單:

clip_image012

圖 6:autocomplete Widget。

ASP.NET Web API服務

ASP.NET Web API是一個支援REST架構的Framework,搭配Visual Studio 2013開發工具來設計、測試、裝載以及部署以HTTP為基礎的服務(HTTP-based services)。

HTTP定義許多動詞(Verbs,有時也稱HTTP Method) 來處理用戶端的請求,每一種HTTP動詞有不一樣的行為。應用在ASP.NET Web API的動詞包含:

  • · GET:用來取得資源。
  • · POST:傳送一個Entity到伺服器,由伺服端來處理後續的動作,ASP.NET Web API則應用在資料的新增。
  • · PUT:在請求傳送一個Entity,取代掉目地URI中既有的Entity。ASP.NET Web API則應用在資料的修改。
  • · DELETE:刪除請求中指明的Entity。ASP.NET Web API則應用在資料的刪除。

若要整合jQuery UI Autocomplete Widget,可以利用ASP.NET Web API,使用HTTP Get取回伺服端資料。

在Visual Studio 2013 開發ASP.NET Web API時,若採用Web Site方式建立網站(「FILE」-「New」-「Web Site」),你需要手動進行一些組態設定,並加入程式碼,才能在Web Site網站中使用ASP.NET Web API。

首先利用Visual Studio 2013內的Nuget工具下載「Microsoft.AspNet.WebApi.WebHost」套件。自主選單「WEBSITE」,選取「Manage NuGet Packages」項目,請選取「Manage NuGet Packages」視窗左方的「Online」,在右上方的文字方塊中,可以輸入「Microsoft.AspNet.WebApi.WebHost」當作篩選條件,找出套件之後,只要點選名稱旁邊的「Install」按鈕安裝,請參考下圖所示:

clip_image014

圖 7:安裝Microsoft.AspNet.WebApi.WebHost。

設計ASP.NET Web API服務

接下來就可以在專案中加入Web API Controller類別。自主選單「WEBSITE」下「Add New Item...」選取使用的程式語言 (Language),如Visual Basic或Visual C#,選取「Web API Controller Class (v2.1)」,檔名命名為「ValuesController」,按下「Add」按鈕建立,請參考下圖所示:

clip_image016

圖 8:建立Web API Controller Class。

Visual Studio 2013會提示將把ASP.NET Web API Controller程式碼加入App_Code資料夾,按下「Yes」按鈕,請參考下圖所示:

clip_image018

圖 9:程式置於App_Code資料夾。

修改範本中有帶一個參數的Get方法,將參數名稱設定為term,回傳System.Collections.Generic.List<string>,將滿足查詢關鍵字開頭的字串回傳:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

public class ValuesController : ApiController {
  // GET api/<controller>
  public IEnumerable<string> Get( ) {
    return new string[ ] { "value1" , "value2" };
  }

  // GET api/<controller>/5
  public System.Collections.Generic.List<string> Get( string term ) {

    var t = term.ToUpper( );
    System.Collections.Generic.List<string> data =
        new System.Collections.Generic.List<string>( );
    data.Add( "Aries" );
    data.Add( "Mary" );
    data.Add( "Mannie" );
    data.Add( "Sussi" );

    var r = ( from s in data where s.ToUpper( ).StartsWith( t ) select s ).ToList( );
    return r;
  }

  // POST api/<controller>
  public void Post( [FromBody]string value ) {
  }

  // PUT api/<controller>/5
  public void Put( int id , [FromBody]string value ) {
  }

  // DELETE api/<controller>/5
  public void Delete( int id ) {
  }
}

 

 

自主選單「WEBSITE」下「Add New Item...」選取使用的程式語言 (Language),如Visual Basic或Visual C#,在右上方的文字方塊中,可以輸入「global」當作篩選條件,選取「Global Application Class」檔案,檔名命名為「Global.asax」,按下「Add」按鈕建立,請參考下圖所示:

clip_image020

圖 10:加入Global.asax檔案。

在Globl.asax檔案Application_Start事件之中,註冊ASP.NET Web API路由:

<%@ Application Language = "C#" %>
<%@ Import Namespace="System.Web.Http" %>
<script runat="server">
    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup

        System.Web.Http.GlobalConfiguration.Configure( config =>
             config.Routes.MapHttpRoute(
                name: "DefaultApi" ,
                routeTemplate: "api/{controller}/{id}" ,
                defaults: new { id = System.Web.Http.RouteParameter.Optional }
            ) );
    }
   
    void Application_End(object sender, EventArgs e)
    {
        //  Code that runs on application shutdown

    }
       
    void Application_Error(object sender, EventArgs e)
    {
        // Code that runs when an unhandled error occurs

    }

    void Session_Start(object sender, EventArgs e)
    {
        // Code that runs when a new session is started

    }

    void Session_End(object sender, EventArgs e)
    {
        // Code that runs when a session ends.
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer
        // or SQLServer, the event is not raised.

    }
      
</script>

 

用戶端網頁

ASP.NET Web API服務設計完成之後,我們來設計用戶端網頁。參考以下ASPX網頁程式,在這個範例中,使用jQuery的ajax方法叫用ASP.NET Web API,傳送使用者輸入的關鍵字到服務的GetData方法,並將取回的清單資料(data)傳入Response方法,以整合jQuery UI的Autocomplete功能:

 

<%@ Page Language= "C#" %>

<!DOCTYPE html>

<script runat = "server">

  
</script>

<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat= "server">
    <title> </title>
    <link href = "Content/themes/sunny/jquery-ui.css" rel="stylesheet" />
    <style>
   
    </style>
</head>
<body>
    <form id = "form1" runat = "server">
        <div>
            <asp:TextBox ID = "TextBox1" runat = "server"> /asp:TextBox>
        </div>
    </form>
    <script src = "Scripts/jquery-2.0.3.min.js"> </script>
    <script src = "Scripts/jquery-ui.min.js"> </script>
    <script>
        $(function () {
            $("#TextBox1").autocomplete({
                source: function (request, response) {
                    var term = request.term

                    $.ajax({
                        type: "Get",
                        url: "api/Values?term=" + term,
                        dataType: 'json',
                        contentType: "application/json; charset=utf-8",
                    }).success(function (data) {
                        response(data);
                    }).fail(function () {
                        alert("failed");
                    });
                }
            });

        });
    </script>
</body>
</html>

這個範例的執行結果請參考下圖所示,當使用者輸入關鍵字,如「a」,就將所有a開頭的字串回傳,提供給文字方塊做為建議清單:

clip_image022

圖 11:Autocomplete Widget。

Tags:

.NET Magazine國際中文電子雜誌 | ASP.NET | jQuery UI | 許薰尹Vivid Hsu

評論 (42) -

cours de theatre paris
cours de theatre paris United States
2017/9/30 下午 05:34:49 #

I really like and appreciate your blog article. Fantastic.

回覆

can ho vung tau
can ho vung tau United States
2017/10/6 下午 10:51:07 #

Thanks so much for the blog article.Thanks Again. Really Cool.

回覆

Buy illegal backlinks
Buy illegal backlinks United States
2017/10/9 下午 12:46:36 #

Thanks for the blog.Really thank you! Want more.

回覆

tanie leki na potencje
tanie leki na potencje United States
2017/10/9 下午 02:25:05 #

Im grateful for the article.Much thanks again. Awesome.

回覆

solarmovie
solarmovie United States
2017/10/10 下午 06:28:59 #

Im grateful for the blog article.Much thanks again. Cool.

回覆

Nathan Coombe
Nathan Coombe United States
2017/10/10 下午 08:37:00 #

A round of applause for your blog.Thanks Again. Really Cool.

回覆

pirater un compte facebook
pirater un compte facebook United States
2017/10/10 下午 10:55:17 #

Really informative article.Much thanks again. Really Great.

回覆

buy hacklinks
buy hacklinks United States
2017/10/12 下午 07:19:40 #

Major thankies for the blog post. Great.

回覆

see this here
see this here United States
2017/10/14 下午 01:59:55 #

Muchos Gracias for your post.Really looking forward to read more. Want more.

回覆

dragon city hack mod
dragon city hack mod United States
2017/10/15 下午 02:00:37 #

Really informative blog article. Great.

回覆

omega xl
omega xl United States
2017/10/15 下午 06:44:08 #

Fantastic blog.Thanks Again. Really Great.

回覆

sletrokor
sletrokor United States
2017/10/17 下午 06:51:35 #

Awesome blog article. Really Great.

回覆

The Avila 2
The Avila 2 United States
2017/10/19 上午 04:14:37 #

Enjoyed every bit of your blog. Cool.

回覆

VigRx Plus Reviews
VigRx Plus Reviews United States
2017/10/19 上午 05:54:28 #

Hey, thanks for the blog post.Much thanks again. Awesome.

回覆

webpage
webpage United States
2017/10/19 下午 04:39:13 #

Thanks a lot for the article.Really thank you! Much obliged.

回覆

pure slim 1000 review
pure slim 1000 review United States
2017/10/20 上午 02:09:21 #

I really like and appreciate your article.Thanks Again. Want more.

回覆

vung tau melody
vung tau melody United States
2017/10/21 上午 01:45:56 #

Very good blog post.Thanks Again. Really Great.

回覆

carte grise en ligne
carte grise en ligne United States
2017/10/21 上午 05:28:04 #

Major thanks for the post.Really thank you! Awesome.

回覆

elakekassa suomi
elakekassa suomi United States
2017/10/21 下午 03:52:41 #

Im thankful for the article. Keep writing.

回覆

Turbotax phone number
Turbotax phone number United States
2017/10/24 上午 06:51:09 #

I am so grateful for your blog.Really looking forward to read more. Much obliged.

回覆

can ho osimi
can ho osimi United States
2017/10/28 上午 07:54:23 #

Looking forward to reading more. Great blog.Thanks Again. Really Cool.

回覆

plock wiadomosci
plock wiadomosci United States
2017/10/30 下午 02:33:53 #

Thanks so much for the article post.Really thank you! Much obliged.

回覆

dweebs
dweebs United States
2017/11/1 上午 07:02:00 #

A round of applause for your article.Really looking forward to read more. Awesome.

回覆

phenocal
phenocal United States
2017/11/1 下午 02:22:38 #

I really enjoy the blog post.Really looking forward to read more. Really Cool.

回覆

phentaslim
phentaslim United States
2017/11/3 下午 02:59:25 #

I loved your blog article.Thanks Again. Much obliged.

回覆

spinal stenosis treatment exercises
spinal stenosis treatment exercises United States
2017/11/15 下午 01:17:06 #

Looking forward to reading more. Great blog.Much thanks again. Awesome.

回覆

bikinis
bikinis United States
2017/11/24 上午 03:27:35 #

Im obliged for the blog article.Really looking forward to read more. Fantastic.

回覆

porno
porno United States
2017/12/1 下午 10:16:30 #

This is one awesome article.Really thank you! Really Cool.

回覆

Build Business Credit
Build Business Credit United States
2017/12/3 上午 10:21:38 #

Im obliged for the article.Thanks Again. Cool.

回覆

wow, awesome article post. Want more.

回覆

I really enjoy the blog.Much thanks again. Will read on...

回覆

Im grateful for the blog post. Will read on...

回覆

canon drivers
canon drivers United States
2017/12/23 上午 11:06:05 #

I really liked your blog.Much thanks again. Will read on...

回覆

driver hp
driver hp United States
2017/12/25 下午 11:03:27 #

I really liked your post.Much thanks again. Cool.

回覆

Thanks for sharing, this is a fantastic article.Really thank you! Much obliged.

回覆

SOCCER HIGHLIGHTS
SOCCER HIGHLIGHTS United States
2017/12/26 下午 05:26:46 #

Appreciate you sharing, great blog post. Fantastic.

回覆

canon drivers
canon drivers United States
2017/12/27 下午 08:16:26 #

I think this is a real great blog.Thanks Again. Awesome.

回覆

my blog
my blog United States
2018/1/2 下午 07:00:04 #

Enjoyed every bit of your blog article.Really thank you! Will read on...

回覆

I cannot thank you enough for the blog.Really thank you! Much obliged.

回覆

Epson drivers
Epson drivers United States
2018/1/3 上午 10:14:58 #

I loved your post.Really looking forward to read more. Awesome.

回覆

mobile slots real money
mobile slots real money United States
2018/1/4 下午 08:59:50 #

Great, thanks for sharing this article. Want more.

回覆

hp printer driver
hp printer driver United States
2018/1/5 下午 06:53:42 #

A big thank you for your article post.Really looking forward to read more. Much obliged.

回覆

新增評論




  Country flag
biuquote
  • 評論
  • 線上預覽
Loading






NET Magazine國際中文電子雜誌

NET Magazine國際中文電子版雜誌,由恆逸資訊創立於2000,自發刊日起迄今已發行超過500篇.NET相關技術文章,擁有超過40000名註冊讀者群。NET Magazine國際中文電子版雜誌希望藉於電子雜誌與NET Developer達到共同學習與技術新知分享,歡迎每一位對.NET 技術有興趣的朋友們多多支持本雜誌,讓作者群們可以有持續性的動力繼續爬文。<請加入免費訂閱>

月分類Month List