JQuery和Ajax在ASP.NET MVC中的基本應用


當我們在開發Web應用程序中使用JQueryAjax異步調用來實現很多功能時,不僅提高了程序的性能,而且給用戶一個更好的交互式界面操作體驗。接下來我們依舊用簡單的實例來學習下它們的應用。

 

創建一個ASP.NET MVC Web Application

在Visual Studio中創建ASP.NET Web Application應用程序,在向導的下一個窗口中選擇空的模板。

 

創建Model

接着我們在Models文件夾下創建一個Product類,用來傳遞數據。

    public class Product
    {
        public int ProductID { get; set; }
        public string ProductName { get; set; }
        public decimal Price { get; set; }
        public int Count { get; set; }
        public string Description { get; set; }
    }

 

創建Controller

Model創建好之后,接着在Controllers文件下創建一個Controller, 命名為"ProductController"。

創建一些測試數據。

 1         public ActionResult Index()
 2         {
 3             List<Product> products = new List<Product>()
 4             {
 5                 new Product {ProductID=1,ProductName="Product A",Price=1000000,Count=5,Description="Description A"},
 6                 new Product {ProductID=2,ProductName="Product B",Price=200000,Count=2,Description="Description B"},
 7                 new Product {ProductID=3,ProductName="Product C",Price=500000,Count=8,Description="Description C"},
 8                 new Product {ProductID=4,ProductName="Product D",Price=80000,Count=10,Description="Description D"},
 9                 new Product {ProductID=5,ProductName="Product E",Price=300000,Count=3,Description="Description E"}
10             };
11 
12             return View(products);
13         }

 

創建View

然后我們在Views -> Product目錄下創建一個View,命名為Index,並綁定顯示Controller中的Product對象列表。

 1 @model IEnumerable<JqueryAjaxApplication.Models.Product>
 2 @{
 3     Layout = null;
 4 }
 5 
 6 <!DOCTYPE html>
 7 
 8 <html>
 9 <head>
10     <meta name="viewport" content="width=device-width" />
11     <title>Index</title>
12 </head>
13 <body>
14     <div> 
15         <h2 style="padding-left:5px;">Product List</h2>
16         <table cellpadding="5" cellspacing="5" >
17             <tr style="background-color: #7FBA00;">
18                 <th>Product ID</th>
19                 <th>Product Name</th>
20                 <th>Price</th>
21                 <th>Count</th>
22                 <th>Description</th>
23             </tr>
24             @foreach (var product in Model)
25             {
26                 <tr style="background-color: #7FBA00; color: white;">
27                     <td>@product.ProductID</td>
28                     <td>@product.ProductName</td>
29                     <td>@product.Price</td>
30                     <td>@product.Count</td>
31                     <td>@product.Description</td>
32                 </tr>
33              }
34         </table>
35     </div>
36 </body>
37 </html>

我們看到上面使用Controller里輸出,View里綁定的方式來實現列表數據的展現,接下來我們進入主題,來看看Ajax是如何實現加載列表數據等的。

首先我們需要創建一個Partial View用來展現數據。

編寫代碼如下:

 1 @using JqueryAjaxApplication.Models
 2 @model IEnumerable<Product>
 3 
 4 <div>
 5     <table cellpadding="5" cellspacing="5">
 6         <tr style="background-color: #7FBA00;">
 7             <th>Product ID</th>
 8             <th>Product Name</th>
 9             <th>Price</th>
10             <th>Count</th>
11             <th>Description</th>
12         </tr>
13         @foreach (Product product in Model)
14         {
15             <tr style="background-color: #7FBA00; color: white;">
16                 <td>@product.ProductID</td>
17                 <td>@product.ProductName</td>
18                 <td>@product.Price</td>
19                 <td>@product.Count</td>
20                 <td>@product.Description</td>
21             </tr>
22         }
23     </table>
24 </div>

相應的Controller的代碼調整如下:

 1         public ActionResult Index()
 2         {
 3             return View();
 4         }
 5 
 6         public PartialViewResult Products()
 7         {
 8             return PartialView(products);
 9         }
10 
11         List<Product> products = new List<Product>()
12         {
13                 new Product {ProductID=1,ProductName="Product A",Price=1000000,Count=5,Description="Description A"},
14                 new Product {ProductID=2,ProductName="Product B",Price=200000,Count=2,Description="Description B"},
15                 new Product {ProductID=3,ProductName="Product C",Price=500000,Count=8,Description="Description C"},
16                 new Product {ProductID=4,ProductName="Product D",Price=80000,Count=10,Description="Description D"},
17                 new Product {ProductID=5,ProductName="Product E",Price=300000,Count=3,Description="Description E"}
18         };

 

使用JQuery和Ajax進行數據操作

獲取Product列表

下面我們修改Index View,使用Ajax調用實現點擊Button按鈕獲取Product列表的功能。

 1 @{
 2     Layout = null;
 3 }
 4 
 5 <!DOCTYPE html>
 6 
 7 <html>
 8 <head>
 9     <meta name="viewport" content="width=device-width" />
10     <title>Index</title>
11     <script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
12 </head>
13 <body>
14     <div>
15         <div style="padding-left:5px;">
16             <input id="btnAjax" name="btnAjax" type="button" value="Get Products" />
17         </div> 
18         <div id="products"></div>
19     </div>
20 
21     <script>
22         $('#btnAjax').click(function () {
23             $.ajax({
24                 url: '/Product/Products',
25                 contentType: 'application/html; charset=utf-8',
26                 type: 'GET',
27                 dataType: 'html'
28             })
29             .success(function (result) {
30                 $('#products').html(result);
31             })
32             .error(function (data) {
33                 alert(data);
34             })
35         });
36     </script>
37 </body>

點擊按鈕前:

點擊按鈕后:

獲取單個Product信息

Product列表數據成功加載,接着我們還想能夠查看獲取單條Product數據,並且能夠修改Product信息,下面我們就簡單實踐一下。

首先,在列表數據視圖里的每條數據最右邊加上一個Edit鏈接,修改Products Partial View代碼如下:

 1 @using JqueryAjaxApplication.Models
 2 @model IEnumerable<Product>
 3 
 4 <div>
 5     <table cellpadding="5" cellspacing="5">
 6         <tr style="background-color: #7FBA00;">
 7             <th>Product ID</th>
 8             <th>Product Name</th>
 9             <th>Price</th>
10             <th>Count</th>
11             <th>Description</th>
12             <th></th>
13         </tr>
14         @foreach (Product product in Model)
15         {
16             <tr style="background-color: #7FBA00; color: white;">
17                 <td>@product.ProductID</td>
18                 <td>@product.ProductName</td>
19                 <td>@product.Price</td>
20                 <td>@product.Count</td>
21                 <td>@product.Description</td>
22                 <td><a href="#" onclick="EditProduct(@product.ProductID)">Edit</a></td>
23             </tr>
24         }
25     </table>
26 </div>

同時,我們在Index頁面上還需要為Product的每個字段創建一個textbox,用來顯示我們獲取到的Product信息。並且可以修改字段信息,保存修改,修改Index頁面如下:

 1      <div>
 2         <div style="padding-left:5px;">
 3             <input id="btnAjax" name="btnAjax" type="button" value="Get Products" />
 4         </div> 
 5         <div style="padding: 5px; font-weight: bold;">Product List</div>
 6         <div id="products"></div>
 7         <div id="editBlock" style="padding-top:10px;display:none;">
 8             <div style="font-weight:bold;">Edit Product</div>
 9             <table>
10                 <tr><td>Product ID:</td><td><input id="txtProductID" name="txtProductID" type="text" disabled /></td></tr>
11                 <tr><td> Product Name:</td><td><input id="txtProductName" name="txtProductName" type="text" /></td></tr>
12                 <tr><td>Count:</td><td><input id="txtCount" name="txtCount" type="text" /></td></tr>
13                 <tr><td> Price:</td><td><input id="txtPrice" name="txtPrice" type="text" /></td></tr>
14                 <tr><td> Description:</td><td><input id="txtDescription" name="txtDescription" type="text" /></td></tr>
15             </table>
16             <div style="padding-top:5px;">
17                 <div id="message" style="color:green;"></div>
18                 <input id="btnSave" name="btnSave" type="button" value="Save" />
19             </div>
20         </div>
21     </div>

 在Controller里添加獲取單條Product信息的Action如下:

        public JsonResult GetProduct(int productId)
        {
            return Json(products.FirstOrDefault(p => p.ProductID == productId), JsonRequestBehavior.AllowGet);
        }

相應的添加獲取單條Productajax方法如下:

        function EditProduct(productId) {
            $("#editBlock").show();

            $.ajax({
                url: '/Product/GetProduct?productId='+productId,
                contentType: 'application/html; charset=utf-8',
                type: 'GET'
            })
            .success(function (result) {
                if (result != null) {
                    $("#txtProductID").val(result.ProductID);
                    $("#txtProductName").val(result.ProductName);
                    $("#txtCount").val(result.Count);
                    $("#txtPrice").val(result.Price);
                    $("#txtDescription").val(result.Description);
                }
            })
            .error(function (data) {
                alert(data);
            })
        }

此時運行程序
加載Product列表

 點擊任意一條記錄的Edit鏈接,這里我們點擊第一條記錄。

保存編輯Product信息

我們看到第一條記錄的各個字段值顯示到了對應的textbox中,接着我們來實現修改Product的內容,點Save按鈕能保存成功,並顯示到Product列表中。

Controller里添加修改Product信息的Action,我們將修改后的結果返回給Products Partial View中。

 1         public PartialViewResult EditProduct(Product product)
 2         {
 3             foreach (var p in products)
 4             {
 5                 if (p.ProductID == product.ProductID)
 6                 {
 7                     p.ProductName = product.ProductName;
 8                     p.Count = product.Count;
 9                     p.Price = product.Price;
10                     p.Description = product.Description;
11                 }
12             }
13 
14             return PartialView("Products", products);
15         }

最后,我們添加Save按鈕的click事件,ajax調用上面我們創建的EditProduct Action

 1        $('#btnSave').click(function () {
 2             var product = {
 3                 ProductID: $('#txtProductID').val(), ProductName: $('#txtProductName').val(),
 4                 Count: $('#txtCount').val(), Price: $('#txtPrice').val(),
 5                 Description: $('#txtDescription').val()
 6             };
 7             $.ajax({
 8                 url: '/Product/EditProduct',
 9                 contentType: 'application/html; charset=utf-8',
10                 data: product,
11                 type: 'GET',
12                 dataType:'html'
13             })
14             .success(function (result) {
15                 $('#products').html(result);
16             })
17             .error(function (data) {
18                 alert(data);
19             })
20         });

好了,我們再次運行程序,點擊Product Name為"Product A"記錄的Edit鏈接。

接着,我們修改以上信息,將Count改為10Price改為1200000, Description改為Description AAA,並點擊Save按鈕。

 

 

好了,本篇就先到此,希望對你有所幫助,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM