MVC之Ajax.BeginForm使用详解之更新列表 mvc验证jquery.unobtrusive-ajax

MVC之Ajax.BeginForm使用详解之更新列表

 

1.首先,请在配置文件设置如下:(该项默认都存在且为true)

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

2.在你的_layout.cshtml中引入JS文件:

<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>

3.获取简单的某个值,比如ID,NAME等int,string类型:

数据实体User.cs:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication1.Models
{
    public class User
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
}
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

控制器UserController.cs:(部分代码)

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
      /// <summary>
        /// 定义的用户仓库
        /// </summary>
        private List<User> _userRepository = new List<User> {
        new User{ID=1,Name="ab"},
        new User{ID=2,Name="bc"},
        new User{ID=3,Name="cd"},
        new User{ID=4,Name="ace"}
        };
        #region GetUserID For (获取简单的某个值)
        public ActionResult UserID()
        {
            return View();
        }
        [HttpPost]
        public int UserID(string name)
        {
            User user = _userRepository.FirstOrDefault(x => string.Equals(x.Name, name, StringComparison.CurrentCultureIgnoreCase));
            if (user == null)
            {
                return -1;
            }
            return user.ID;
        }
        #endregion
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

视图UserID.cshtml:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
@using MvcApplication1.Models;
@model User
@{
    ViewBag.Title = "查询用户ID";
}
@using (Ajax.BeginForm("UserID", "User", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "div_uid", InsertionMode = InsertionMode.Replace }))
{
    @Html.TextBox("name")
    <button type="submit" name="CX" style="width:80px; height:30px;">查询UserID</button>
}
<div id="div_uid"></div>
<!--如果是异步,则本文本框输入的值不会被刷新掉-->
<input type="text" autocomplete="off" />
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

如果你前面该引入的文件都引了,那么在点击查询时,

div_uid 中就会显示查询到的ID

结果如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

4.获取用户列表,用于异步刷新列表:

注意:如果你有一个列表需要异步查询并更新查询结果,那就需要使用分布视图!也就是说你还需要一个View才可以,不可以将结果直接返回到本页!

控制器UserController.cs:(部分代码)

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
     #region GetUserList  (获取用户列表,用于异步刷新列表)
        // GET: /User/
        public ActionResult UserList()
        {
            var result = _userRepository;
            return View(result);
        }
        [HttpPost]
        public ActionResult UserList(string name)
        {
            var result = _userRepository;
            if (!string.IsNullOrWhiteSpace(name))
            {
                result = _userRepository.Where(u => u.Name.Contains(name)).ToList();
            }
            return PartialView("_pview", result);
        }
        #endregion
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

主视图UserList.cshtml:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
@using MvcApplication1.Models;
@model List<User>
@{
    ViewBag.Title = "Index";
}
@using (Ajax.BeginForm("UserList", "User", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "tb", InsertionMode = InsertionMode.Replace }))
{
    @Html.TextBox("name")
     <button type="submit"  name="CX" style="width:80px; height:30px;">查询UserList</button>
}
<table>
    <thead>
        <tr>
            <td>用户ID</td>
            <td>用户名称</td>
        </tr>
    </thead>
    <tbody id="tb">
    @Html.Partial("_pview", Model)
    </tbody>
</table>
<!--如果是异步,则本文本框输入的值不会被刷新掉-->
<input type="text" autocomplete="off" />
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

分布视图_pview.cshtml:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
@using MvcApplication1.Models;
@model List<User>
@{
    Layout = null;
    ViewBag.Title = "_pview";
}
@foreach (User u in Model)
{
    <tr>
        <td>@u.ID</td>
        <td>@u.Name</td>
    </tr>
}
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

结果如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

点击查询后:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

5.好了,基本上主流的2个用法都有,希望能对大家有帮助!

 
 
 

Unobtrusive Ajax

Ajax (Asynchronous JavaScript and XML 的缩写),如我们所见,这个概念的重点已经不再是XML部分,而是 Asynchronous 部分,它是在后台从服务器请求数据的一种模型。MVC 框架内置了对 Unobtrusive Ajax 的支持,它允许我们通过 MVC 的 Help mothod 来定义 Ajax 的特性,而不用在 View 中参杂一大段 JavaScript 代码。

本文目录:

普通 Ajax 使用方式

在讲 MVC 中的 Unobtrusive Ajax 之前,我们先来看看 MVC 中 Ajax 的普通使用方式,读者可以在阅读后文的时候进行比较学习。
新建一个MVC应用程序(基本模板),添加一个名为 Home 的 controller,为自动生成的 Index action 添加视图,编辑 Index.cshtml 代码如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
@{
    ViewBag.Title = "Index";
}

<script type="text/javascript">
    function test() {
        $.ajax({
            url: '@Url.Action("GetTestData")',
            type: "POST",
            success: function (result) {
                $("#lblMsg").text(result.msg);
            }
        });
    }
</script>

<h2 id="lblMsg"></h2>
<input type="button" value="测试" onclick="test();" />
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

在 HomeController 中添加一个名为 Test 的 action,如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
public JsonResult GetTestData() {
    return Json(
        new { msg = "Datetime from server:" + DateTime.Now.ToString("HH:mm:ss") }
    );
}
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

运行程序,点击测试按钮,我们可以看到用 Ajax 从后台取回来的时间:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

每次点击测试按钮时间都会刷新。这个地方有一点需要提醒大家,这个例子中 $.ajax() 方法使用的是 POST 请求,如果要使用 GET 请求,Test action 中调用 Json 方法需要设置 JsonRequestBehavior 的值为 AllowGet(默认是 DenyGet),如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
public JsonResult GetTestData() {
    return Json(
        new { msg = "Datetime from server:" + DateTime.Now.ToString("HH:mm:ss") },
        JsonRequestBehavior.AllowGet
    );
}
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

另外,改成 GET 请求后,多次点击测试按钮,时间不会刷新。这是因为 GET 请求在 ASP.NET 中对于相同的URL请求返回的是缓存中的数据。

什么是 Unobtrusive Ajax

Unobtrusive Ajax 是在 Web 页面使用 JavaScript 的一种通用方式。这个术语没有明确的定义,但它有如下基本的原则(来自*):

  • 行为(JavaScript 代码)与 Web 页面的结构(Html 标记)和表现(CSS样式)分离。
  • JavaScript 最佳实现,解决JavaScript语言本身存在的传统问题(如缺乏可扩展性和开发人员编码风格不一致性)。
  • 解决浏览器兼容性问题。

为了加深理解,请观察如下某个 Unobtrusive Ajax 的“结构”部分的一段代码:

...
<form action="/People/GetPeopleData" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#tableBody" id="form0" method="post">
...

这是 MVC 开启 Unobtrusive JavaScript 后调用 Ajax.BeginForm 方法生成的代码。这段代码和 JavaScript 是完全分离的,Html标签通过一些标记来告诉 JavaScript 所具有什么样的行为。分离出来的 JavaScript 文件(MVC中指引入的jquery.unobtrusive-ajax.min.js文件)中的代码,没有一句是专门为某个特定的Web页面中的某个Html元素来编写的,即所有函数都是通用的。这就是 Unobtrusive Ajax 的核心思想。

相对于普通使用 Ajax 的方式,Unobtrusive Ajax 更容易阅读,增强了可扩展性和一致性,而且方便维护。

使用 MVC Unobtrusive Ajax

在 MVC 中使用 Unobtrusive Ajax ,首先要将其“开启”,需要做两个动作。一个是配置根目录下的 Web.config 文件,在 configuration/appSettings 节点下的 UnobtrusiveJavaScriptEnabled 值设为 true,如下所示:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
...
<configuration>
    <appSettings>
        ...
        <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings>
</configuration>
... 
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

UnobtrusiveJavaScriptEnabled 的值在程序创建的时候默认为true,在开发的时候有时候只需要检查一下。第二个动作就是在需要使用 MVC Unobtrusive Ajax 的 View 中引入jquery库和jquery.unobtrusive-ajax.min.js文件,一般更为常见的是在 /Views/Shared/_Layout.cshtml 中引入,如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
</head>
<body>
    @RenderBody()
</body>
</html>
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

现在我们来做一个使用 Unobtrusive Ajax 的例子,从服务器获取一个简单的用户列表。为此我们需要准备一个Model,如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
namespace MvcApplication1.Models {
    public class Person {
        public string ID { get; set; }
        public string Name { get; set; }
        public Role Role { get; set; }
    }

    public enum Role {
        Admin, User, Guest
    }
}
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

我一般习惯先写后台方法,再写UI。创建一个名为 People 的 controller, 在该 controller 中写好要用的 action,代码如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
public class PeopleController : Controller {
    public class PeopleController : Controller {
        private Person[] personData = {
            new Person {ID = "ZhangSan", Name = "张三", Role = Role.Admin},
            new Person {ID = "LiSi", Name = "李四", Role = Role.User},
            new Person {ID = "WangWu", Name = "王五", Role = Role.User},
            new Person {ID = "MaLiu", Name = "马六", Role = Role.Guest}
        };

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

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

        public ActionResult GetPeople(string selectedRole = "All") {
            return View((object)selectedRole);
        }
    }
}
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

这里添加了 GetPeopleData action方法,根据 selectedRole 获取用户数据并传递给 PartialView 方法。

接着为 GetPeopleData action 创建一个partial view:/Views/People/GetPeopleData.cshtml ,代码如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
@using MvcApplication1.Models
@model IEnumerable<Person>

@foreach (Person p in Model) {
    <tr>
        <td>@p.ID</td>
        <td>@p.Name</td>
        <td>@p.Role</td>
    </tr>
}
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

再创建我们的主视图 /Views/People/GetPeople.cshtml,代码如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
@using MvcApplication1.Models
@model string

@{
    ViewBag.Title = "GetPeople";
    AjaxOptions ajaxOpts = new AjaxOptions {
        UpdateTargetId = "tableBody"
    };
}

<h2>Get People</h2>
<table>
    <thead><tr><th>First</th><th>Last</th><th>Role</th></tr></thead>
    <tbody id="tableBody">
        @Html.Action("GetPeopleData", new { selectedRole = Model })
    </tbody>
</table>
@using (Ajax.BeginForm("GetPeopleData", ajaxOpts)) {
    <div>
        @Html.DropDownList("selectedRole", new SelectList(
            new[] { "All" }.Concat(Enum.GetNames(typeof(Role)))))
        <button type="submit">Submit</button>
    </div>
}
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

先是创建了一个 AjaxOptions 对象,通过它的一些属性(如UpdateTargetId、Url、HttpMethod等)可设置 Ajax 如何请求。这些属性可见名思意,如 UpdateTargetId 表示调用 Ajax 请求后要刷新的元素(通过元素ID来指定)。然后把需要提交到服务器的表单包括在 Ajax.BeginForm() 方法内,通过 submit 元素将该表单数据提交到服务器。

为了运行效果美观些,我们在 _Layout.cshtml 文件中为 table 元素添加一些样式,如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
...
table, td, th {
    border: thin solid black; border-collapse: collapse; padding: 5px;
    background-color: lemonchiffon; text-align: left; margin: 10px 0;
}
...
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

运行程序,URL 定位到 /People/GetPeople,在页面中点击提交按钮,效果如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

Ajax.BeginForm 是通过提交表单的方式向服务器发送 ajax 请求,MVC中也可以使用 Ajax.ActionLink() 方法生成链接来向服务器发送 ajax 请求。下面我们在 GetPeople.cshtml 视图中增加这种请求方式:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
<div>
    @foreach (string role in Enum.GetNames(typeof(Role))) {
        @Ajax.ActionLink(role, "GetPeopleData",  new {selectedRole = role},
            new AjaxOptions {UpdateTargetId = "tableBody"}) @:&nbsp;
    }
</div>
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

效果和前面是一样的:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

Ajax.ActionLink() 和 Ajax.BeginForm() 不同的是,前者只能通过 Url 参数向服务器传送数据。

Unobtrusive Ajax 如何工作

Unobtrusive Ajax 是如何工作的呢?

当调用 Ajax.BeginForm 方法后,通过 AjaxOptions 对象设置的属性将会被转化成 form 元素的属性(标记),这些属性以 data-ajax 开头,如本示例生成的 form 元素:

<form action="/People/GetPeopleData" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#tableBody" id="form0" method="post">
...

当 GetPeople.cshtml 视图加载完成并呈现 Html 页面时,jquery.unobtrusive-ajax.js 库寻找所有 data-ajax 属性值为true的元素,然后根据其他以 data-ajax 开头的属性值,jQuery 库中的函数将知道如何去执行 Ajax 请求。

配置 AjaxOptions

AjaxOptions 类中的属性告诉 MVC 框架如何生成 Ajax 请求相关的 JavaScript 和 Html 代码。它包含如下属性:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

这些属性 VS 的智能提示都有很好的解释,这里不一个一个讲,只选几个有代表性的讲讲。

AjaxOptions.Url 属性

在上面的示例中,我们在 Ajax.BeginForm() 方中指定了 action 名称参数,MVC 帮我们生成了Ajax请求的Url ( action="/People/GetPeopleData" )。这样做存在一个问题,当浏览器禁用JavaScript的时候,点击提交按钮页面将发生新的请求(非Ajax请求 /People/GetPeopleData),这样服务器返回的数据将直接替换掉原来的页面。解决这个问题可以使用 AjaxOptions.Url 属性,原因是 AjaxOptions.Url 属性会生成另外一个专门用于 ajax 请求的Url。如下我们对 /Views/People/GetPeople.cshtml 进行简单的修改:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
...
@{
    ViewBag.Title = "GetPeople";
    AjaxOptions ajaxOpts = new AjaxOptions {
        UpdateTargetId = "tableBody",
        Url = Url.Action("GetPeopleData")
    };
}
...
@using (Ajax.BeginForm(ajaxOpts)) {
    ...
}
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

运行后我们看到的是和先前一样的结果,说明在效果上没有区别。但它生成的 form 属性却不一样:

<form id="form0" action="/People/GetPeople" method="post" data-ajax-url="/People/GetPeopleData" data-ajax-update="#tableBody" data-ajax-mode="replace" data-ajax="true">
...

它生成了两个 Url,分别为 action 属性 和 data-ajax-url 属性的值,前者是 Ajax.BeginForm() 方法根据当前 controller 和 action 名称生成的,后者是 AjaxOptions 的 Url 属性生成的。当浏览器没有禁用 JavaScript 时,Unobtrusive Ajax JS库会获取 data-ajax-url 属性的值作为 Url 发生 ajax 请求。当浏览器禁用了 JavaScript 时,自然 action 属性的值决定了表示提交的 Url,服务器将返回原来整个的页面。虽然局部未能刷新,但不会让用户觉得网站做得很糟糕。

Ajax 加载数据的同时给用户反馈

当加载数据需要花较长时间,为了避免假死状态,应当给用户一个反馈信息,如“正在加载...”字样。在 MVC 的 Unobtrusive Ajax 中通过 AjaxOptions 的 LoadingElementId 和 LoadingElementDuration 两个属性可轻松做到这一点。修改 GetPeople.cshtml 如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
@using MvcApplication1.Models
@model string

@{
    ViewBag.Title = "GetPeople";
    AjaxOptions ajaxOpts = new AjaxOptions {
        UpdateTargetId = "tableBody",
        Url = Url.Action("GetPeopleData"),
        LoadingElementId = "loading",
        LoadingElementDuration = 1000,
    };
}
<h2>Get People</h2>
<div id="loading" class="load" style="display:none">
    <p>Loading Data...</p>
</div>
...
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

不解释,运行程序看效果:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

弹出确认对话框

使用MVC中的 Unobtrusive Ajax 弹出确认对话框也很方便,设置一下 AjaxOptions.Confirm 属性的值却可,如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
...
@{
    ViewBag.Title = "GetPeople";
    AjaxOptions ajaxOpts = new AjaxOptions {
        UpdateTargetId = "tableBody",
        Url = Url.Action("GetPeopleData"),
        LoadingElementId = "loading",
        LoadingElementDuration = 1000,
        Confirm = "Do you wish to request new data?"
    };
}
...
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

弹出的对话框如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

Ajax 回调函数

AjaxOptions 类中的 OnBegin、OnComplete、OnFailure 和 OnSuccess 属性允许我们在 ajax 请求周期的某个状态点定义回调函数。来看具体的用法。

在 GetPeople.cshtml 文件中加入如下4个回调函数:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
<script type="text/javascript">
    function OnBegin() {
        alert("This is the OnBegin Callback");
    }
    function OnSuccess(data) {
        alert("This is the OnSuccessCallback: " + data);
    }
    function OnFailure(request, error) {
        alert("This is the OnFailure Callback:" + error);
    }
    function OnComplete(request, status) {
        alert("This is the OnComplete Callback: " + status);
    }
</script>
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

接着设置 AjaxOptions 对象的4个事件属性:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax
...@{
    ViewBag.Title = "GetPeople";
    AjaxOptions ajaxOpts = new AjaxOptions {
        UpdateTargetId = "tableBody",
        Url = Url.Action("GetPeopleData"),
        OnBegin = "OnBegin",
        OnFailure = "OnFailure",
        OnSuccess = "OnSuccess",
        OnComplete = "OnComplete"
    };
}...
MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

运行程序,弹出三个消息框如下:

MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax MVC之Ajax.BeginForm使用详解之更新列表  mvc验证jquery.unobtrusive-ajax

这四个事件属性中最常用的就是 OnSuccess 和 OnFailure 两个属性了,如我们会经常在 OnSuccess 回调函数中对返回的 Json 数据进行处理。


其实我个人更倾向于普通的 Ajax 使用方式。Ajax.BeginForm() 和 Ajax.ActionLink() 用的少,习惯用 Html.BeginForm() 或 Html.ActionLink() 和手写 jQuery ajax 代码来代替。

上一篇:【MVC】MvcPager分页及边界传递数据示例


下一篇:AjaxHelper创建的ajax无效,JQuery直接方法post有效,原来是Microsoft.jQuery.Unobtrusive.Ajax错误,NuGet解决