异步Ajax
Ajax异步刷新应用在Web开发中经常用到,在过去WebForm中通常是使用JQuery和一般处理程序或者aspx页面来实现;
在MVC中,虽然依然可以使用一般处理程序,但是一般还是通过在Controller中新建Action方法来实现。
一、 JQuery+一般处理程序 实现异步Ajax
1.新建一个空MVC项目,命名为AjaxDemo
2. 右键项目,选择“添加->HTML页”,命名为ShowDateTime.html,引入jquery文件(NuGet下载jquery),代码如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
<script src="Scripts/jquery-3.1.1.min.js"></script>
<script>
$(function () {
$("#btnGetDateTime").click(function () {
$.post(
"GetDateTimeHandler.ashx",
{},
function (data) {
$("#divDateTime").html(data);
});
});
})
</script>
</head>
<body>
<input type="button" value="获取时间" id="btnGetDateTime" />
<div id="divDateTime"></div>
</body>
</html>
3. 右键项目,选择“添加->新建项->一般处理程序”,并设置名称为GetDateTimeHandler.ashx,修改代码:
public class GetDateTimeHandler : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(DateTime.Now.ToString());
} public bool IsReusable
{
get
{
return false;
}
}
}
4. 运行ShowDateTime.html(右键该文件,在浏览器中查看),如下图:
二、Jquery+Action 实现异步Ajax
1. 在Models文件夹下新建一个User实体
public class User
{
public int Id { get; set; } public string UserName { get; set; } public int Age { get; set; } public string TelPhone { get; set; }
}
2. 新建HomeController,添加UserList方法
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
} [HttpPost]
public ActionResult UserList()
{
List<User> list = new List<User>()
{
new User() {Id = ,UserName="小明",Age=,TelPhone="" },
new User() {Id = ,UserName="小王",Age=,TelPhone="" },
new User() {Id = ,UserName="小赵",Age=,TelPhone="" },
new User() {Id = ,UserName="小李",Age=,TelPhone="" },
new User() {Id = ,UserName="小胡",Age=,TelPhone="" },
};
return Json(list);
}
3. 新建Index视图,使用$.post异步调用HomeController中的UserList方法,并更新界面
@{
ViewBag.Title = "Index";
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function () {
$("#btnUserList").click(function () {
$.post("/Home/UserList", {}, function (data) {
var result = data;
$.each(result,function(key,value){
$("#divUserList").append(result[key].Id + "\t"
+ result[key].UserName + "\t"
+ result[key].Age + "\t"
+ result[key].TelPhone + "<br/>");
}); });
});
})
</script> <h2>Index</h2>
<div>
<input type="button" id="btnUserList" value="获取用户信息" />
<div id="divUserList"></div>
</div>
4. 运行结果如下:
三、Ajax辅助方法 Ajax.ActionLink
在ASP.Net MVC框架中包含一组Ajax辅助方法,它们可以用来创建异步表单和指向控制器的异步链接。当使用这些辅助方法时,不需要编写任何脚本代码就可以实现程序异步。
这些Ajax辅助方法依赖于非侵入式MVC的jQuery扩展。如果使用这些辅助方法,就需要引入脚本文件jquery.unobtrusive-ajax.js,并在视图中添加此脚本引用。
1.在项目中添加非侵入式Ajax脚本
使用NuGet搜索“Microsoft JQuery”,安装 非侵入式Ajax脚本,如下图
2.在Home控制器中添加AjaxTest方法,并右键方法添加AjaxTest视图
public ActionResult AjaxTest()
{
return View();
}
3.在Home控制器中添加PartialViewTest方法返回局部视图,并右键方法创建局部视图页
[HttpPost]
public PartialViewResult PartialViewTest()
{
ViewBag.Msg = "Hello World";
return PartialView();
}
PartialViewTest视图
<h2>@ViewBag.Msg</h2>
4.在AjaxTest视图脚本节点中引入非侵入式Ajax脚本
@section scripts{
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
}
5.使用@Ajax.ActionLink创建异步链接按钮
@Ajax.ActionLink("链接文本","PartialViewTest",new AjaxOptions() {
UpdateTargetId = "divMsg",
InsertionMode = InsertionMode.Replace,
HttpMethod = "Post"
})
AjaxTest视图整体代码如下:
@{
ViewBag.Title = "AjaxTest";
} <h2>AjaxTest</h2>
@Ajax.ActionLink("链接文本","PartialViewTest",new AjaxOptions() {
UpdateTargetId = "divMsg",
InsertionMode = InsertionMode.Replace,
HttpMethod = "Post"
})
<div id="divMsg"></div>
@section scripts{
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
}
6.运行Home/AjaxTest,结果如下:
四、Ajax辅助方法 Ajax.BeginForm
1.在Home控制器下创建AjaxForm和UserInfo方法,代码如下:
public ActionResult AjaxForm()
{
return View();
} [HttpPost]
public ActionResult UserInfo(string txtName)
{
List<User> list = new List<User>()
{
new User() {Id = ,UserName="小明",Age=,TelPhone="" },
new User() {Id = ,UserName="小王",Age=,TelPhone="" },
new User() {Id = ,UserName="小赵",Age=,TelPhone="" },
new User() {Id = ,UserName="小李",Age=,TelPhone="" },
new User() {Id = ,UserName="小胡",Age=,TelPhone="" },
};
var result = list.Where(u => u.UserName == txtName).FirstOrDefault();
return Content("姓名:"+result.UserName+"\t"+"年龄:"+result.Age+"\t"+"电话:"+result.TelPhone);
}
2.添加AjaxForm视图,引入非侵入式Ajax脚本,使用Ajax.BeginForm创建异步表单,代码如下:
@{
ViewBag.Title = "AjaxForm";
} <h2>AjaxForm</h2>
@using (Ajax.BeginForm("UserInfo","Home",new AjaxOptions() {
UpdateTargetId ="divMsg",/*局部更新容器Id*/
InsertionMode = InsertionMode.Replace,/*替换方式*/
HttpMethod = "post",
OnFailure="fail",/*失败后回调js函数*/
OnSuccess="success",/*成功后回调js函数*/
LoadingElementId = "loadingMsg"/*加载元素Id*/
}))
{
<input type="text" name="txtName" />
<input type="submit" />
}
<div id="loadingMsg" style="display:none">加载中......</div>
<div id="divMsg"></div>
@section scripts{
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script>
function fail(txt) {
alert("查询失败,失败信息:"+txt);
}
function success(txt) {
alert("查询成功,查询信息:"+txt);
}
</script>
}
3.运行/Home/AjaxForm,结果如下:
最新文章
- angular-笔记
- UEditor 1.4.3.1.NET版本上传配置备忘录
- (十七)迭代器模式详解(foreach的精髓)
- ckeditor+jsp+spring配置图片上传
- Jrtplib
- SpringMVC10数据验证
- Java数据结构漫谈-ArrayList
- 设置cmd的codepage的方法
- vi/vim 如何添加和删除多行注释
- JQuery EasyUI 之 messager基本使用
- 2019-04-24-day039-数据库的增查
- 编写具有临时root权限的应用
- Linux 下面解压.tar.gz 和.gz文件解压的方式
- service注入到action中
- webuploader 文件上传总结
- Daily scrum 2015.10.19
- CSS基础-DAY1
- db2
- JavaScript设计模式-18.享元模式
- 解决 src/MD2.c:31:20: fatal error: Python.h: No such file or directory安装包错误
热门文章
- linux在线添加硬盘、扫盘
- 2019年北航OO第三单元(JML规格任务)总结
- POJ——T3352 Road Construction
- linux 安装 redis3.0
- Swift环境下实现UILabel居上 居中 居下对齐
- 覆盖率測试工具gcov的前端工具_LCOV_简单介绍
- zzulioj--1776--和尚特烦恼2——第几个素数(技巧模拟)
- BZOJ 球形空间产生器 解题报告(高斯消元)
- 11.字符,字符常见开发,_itoa函数
- BZOJ 3680 模拟退火