位置:首頁 > Web開發 > MVC框架教學 > MVC框架 - AJAX支持

MVC框架 - AJAX支持

Ajax是異步JavaScript和XML的一個簡寫形式。MVC框架包含了不顯眼的Ajax內置支持,通過它可以使用輔助方法,在所有的視圖添加代碼來定義Ajax特性。 在MVC中此特征是基於jQuery的功能。

為不使注意AJAX支持,在MVC應用程序,打開Web.config文件,並使用下麵的代碼設置appSettings部分內的UnobtrusiveJavaScriptEnabled屬性。如果鍵已經存在於應用程序,可以忽略這一步。

<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
mvc_ajax_config

在這之後,打開位於下Views/Shared文件夾中,見到布局文件_Layout.cshtml文件。 我們將引用添加jQuery庫到這裡了,使用下麵的代碼:

<script src="~/Scripts/jquery-ui-1.8.24.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
mvc_ajax_config_1

創建一個Ajax應用程序

在以下的例子中,我們將創建這將顯示係統中的用戶的列表的形式。 我們將會把有三個選項的下拉列表:管理員,普通和來賓。當將選擇其中的一個值,它會顯示屬於使用AJAX獲取這一類的用戶列表。

步驟1:

創建一個模型文件Model.cs並複製下麵的代碼:

using System;

namespace MVCAjaxSupportExample.Models
{
    public class User
    {
        public int UserId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime BirthDate { get; set; }
        public Role Role { get; set; }
    }

    public enum Role
    {
        Admin,
        Normal,
        Guest
    }
} 

步驟2:

創建一個控製器文件名為UserController.cs並創建裡麵有兩個動作方法如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using MVCAjaxSupportExample.Models;

namespace MVCAjaxSupportExample.Controllers
{
    public class UserController : Controller
    {
        private readonly User[] userData =
        {
            new User {FirstName = "Edy", LastName = "Clooney", Role = Role.Admin},
            new User {FirstName = "David", LastName = "Sanderson", Role = Role.Admin},
            new User {FirstName = "Pandy", LastName = "Griffyth", Role = Role.Normal},
            new User {FirstName = "Joe", LastName = "Gubbins", Role = Role.Normal},
            new User {FirstName = "Mike", LastName = "Smith", Role = Role.Guest}
        };

        public ActionResult Index()
        {
            return View(userData);
        }

        public PartialViewResult GetUserData(string selectedRole = "All")
        {
            IEnumerable data = userData;
            if (selectedRole != "All")
            {
                var selected = (Role) Enum.Parse(typeof (Role), selectedRole);
                data = userData.Where(p => p.Role == selected);
            }
            return PartialView(data);
        }

        public ActionResult GetUser(string selectedRole = "All")
        {
            return View((object) selectedRole);
        }
    }
}

步驟3:

現在,用下麵的代碼創建一個名為GetUserData的局部視圖。該視圖將用於顯示基於從下拉列表中選擇的角色的用戶的列表。

@model IEnumerable<MVCAjaxSupportExample.Models.User>

<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.FirstName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.LastName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.BirthDate)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.BirthDate)
        </td>
        <td>
        
        </td>
    </tr>
}

</table>

步驟4:

現在創建一個getUser視圖使用下麵的代碼。這個視圖將異步從先前創建的控製器的GetUserData動作得到數據。

@using MVCAjaxSupportExample.Models
@model string
@{
ViewBag.Title = "GetUser";
AjaxOptions ajaxOpts = new AjaxOptions {
UpdateTargetId = "tableBody"
};
}
<h2>Get User</h2>
<table>
    <thead><tr><th>First</th><th>Last</th><th>Role</th></tr></thead>
        <tbody id="tableBody">
            @Html.Action("GetUserData", new {selectedRole = Model })
        </tbody>
</table>

@using (Ajax.BeginForm("GetUser", ajaxOpts)) {
    <div>
        @Html.DropDownList("selectedRole", new SelectList(
        new [] {"All"}.Concat(Enum.GetNames(typeof(Role)))))
        <button type="submit">Submit</button>
    </div>
}

步驟5:

最後隻是改變Route.config項,啟動用戶控製器。

defaults: new { controller = "User", action = "GetUser", id = UrlParameter.Optional }

步驟6:

最後,運行這將看起來像下麵的截圖中的應用:

mvc_ajax_application

如果從下拉菜單中選擇管理員(Admin),它會去獲取所有具有管理員類型的用戶。這是通過AJAX發生,不需要重新加載整個頁麵。

mvc_ajax_application_1