unobtrusive ajax,Unobtrusive Ajax

前言

这一节我们来讲讲Unobtrusive中的Ajax提交,大部分情况下我们是利用JQuery来进行Ajax请求,当然利用JQuery来进行表单Ajax请求也不例外,但是相对于Unobtrusive Ajax来进行表单请求则Unobtrusive Ajax代码量显得更加精简,所以基于这点本文来讲讲这个Unobtrusive Ajax。

话题

我们首先一步一步深入来讲述我们本节的话题,我们在Models文件夹下建立如下一个类:

48304ba5e6f9fe08f3fa1abda7d326ab.png

public class Blog

{

public long Id { get; set; }

public string Name { get; set; }

public string BlogAddress { get; set; }

public string Description { get; set; }

public Category Category;

}

public enum Category

{

C,

Java,

JavaScript,

SQLServer

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

接下来我们建立一个Blog控制器并且初始化数据,如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

private Blog[] blogs = {

new Blog { Id =1, Name ="xpy0928 1",Category=Category.C,BlogAddress="http://www.cnblogs.com/CreateMyself/", Description ="出生非贫即贵,你我无能为力"},

new Blog { Id =2, Name ="xpy0928 2", Category=Category.Java,BlogAddress="http://www.cnblogs.com/CreateMyself/",Description ="后天若不加以努力赶之超之,又能怪谁呢!"},

new Blog { Id =3, Name ="xpy0928 3",Category=Category.JavaScript,BlogAddress="http://www.cnblogs.com/CreateMyself/", Description ="自己都靠不住不靠谱,又能靠谁呢!" },

new Blog { Id =4, Name ="xpy0928 4",Category=Category.SQLServer, BlogAddress="http://www.cnblogs.com/CreateMyself/",Description ="靠自己!"}

};

48304ba5e6f9fe08f3fa1abda7d326ab.png

我们现在的场景是显示博客中所有数据,然后通过下拉框中的类别来筛选对应的数据。我们来看看:

显示博客所有数据 GetBlogs

public ActionResult GetBlogs()

{

return View(blogs);

}

根据类别筛选数据:

48304ba5e6f9fe08f3fa1abda7d326ab.png

[HttpPost]

public ActionResult GetBlogs(string selectedCategory)

{

if (selectedCategory == null || selectedCategory == "All")

{

return View(blogs);

}

else

{

Category selected = (Category)Enum.Parse(typeof(Category), selectedCategory);

return View(blogs.Where(p => p.Category == selected));

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

在视图中,我们给出如下代码:

(1)获取所有博客数据:

48304ba5e6f9fe08f3fa1abda7d326ab.png

@model IEnumerable

GetBlogs

IDNameBlogAddressDescriptionCategory

@foreach (Blog p in Model)

{

@p.Id@p.Name@p.BlogAddress@p.Description@p.Category

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

(2)生成下拉分类列表:

48304ba5e6f9fe08f3fa1abda7d326ab.png

@using (Html.BeginForm())

{

@Html.DropDownList("selectedCategory", new SelectList(new[] { "All"}.Concat(Enum.GetNames(typeof(Category))) ))

提交

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

我们运行程序结果如下:

004240bd3b0027cfe9c5272b86685e28.png

一切都如正常的进行,但是这样做页面会重新加载页面。

那么问题来了,如果我们想根据下拉列表不重新加载页面又该如何呢?我们就利用本节要讲的Unobtrusive Ajax!

Unobtrusive Ajax

我们需要在Web.Config进行如下启动:

15f12e97014bf49f9c2c7128255b41a5.png

接下来我们通过NuGet下载Unobtrusive Ajax,如下:

547d04c169e4c7c2dff9d7f4a6057675.png

然后在视图中引入如下脚本:

接下来我们对控制器方法进行相应的调整,结合我们之前学到的分部视图:

48304ba5e6f9fe08f3fa1abda7d326ab.png

public PartialViewResult GetBlogData(string selectedCategory = "All")

{

IEnumerable data = blogs;

if (selectedCategory != "All")

{

Category selected = (Category)Enum.Parse(typeof(Category), selectedCategory);

data = blogs.Where(p => p.Category == selected);

}

return PartialView(data);

}

public ActionResult GetBlogs(string selectedCategory = "All")

{

return View((object)selectedCategory);

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

此时我们重点在视图中利用Unobtrusive Ajax。

AjaxOptions ajaxOptions = new AjaxOptions

{

UpdateTargetId = "blogsTable",

};

@Html.Action("GetBlogData", new { selectedCategory = Model })

利用AjaxOptions中的UpdateTargetId对应我们需要筛选的数据。接下来我们利用Ajax请求

48304ba5e6f9fe08f3fa1abda7d326ab.png

@using (Ajax.BeginForm("GetBlogData", ajaxOptions))

{

@Html.DropDownList("selectedCategory", new SelectList(

new[] { "All" }.Concat(Enum.GetNames(typeof(Category)))))

提交

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

接下来我们看看运行结果:

e94cb4c8b015b44e3ac36831806ee709.png

接下来我们来看看AjaxOptions其他参数 :

48304ba5e6f9fe08f3fa1abda7d326ab.png

AjaxOptions ajaxOptions = new AjaxOptions

{

UpdateTargetId = "blogsTable",

LoadingElementId = "loadingBlogs",

LoadingElementDuration = 1000,

Confirm = "你真的要显示所有博客?",

};

48304ba5e6f9fe08f3fa1abda7d326ab.png

Loading Blogs...

上述 LoadingElementId  为加载数据时显示加载中, LoadingElementDuration  为显示加载中时间。我们看看其显示效果,通过将时间延长。

9cc771dc6fb5e0d236542780d82373fd.png

显示加载中:

2423f0b83636baae6df6afba1e8992bf.png

如上我们是通过下拉框点击提交按钮进行获取数据。

那么问题来了,我们如何通过链接来获取数据呢?请往下看。

我们在视图中添加如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

@foreach (string category in Enum.GetNames(typeof(Category)))

{

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

我们运行看看效果:

1fbde8a7382e7edefbf17cb4bb4bcd22.png

我们点击C试试效果,如下:

6cb6cf009cd3068ad8cbe342881042ba.png

结语

本节我们利用Unobtrusive Ajax来实现类似JQuery的Ajax提交,利用Unobtrusive Ajax也是一种还不错的方式,而且Unobtrusive Ajax中AjaxOptions还有其他参数有兴趣的童鞋可以去了解了解。本节利用这个去请求分部视图并填充,但是这种方式还不是最优的方案,我们完全可以利用JSON来返回数据,对吧,下节我们利用JsonResult来返回数据。晚安,世界。【说明:有关MVC系列代码已全部托管于Github,可以点击右上角(Fork me on Github)下载代码】。

非常感谢您花时间读完这篇文章,如果您觉得此文不错,请点一下“推荐”按钮,您的“推荐”就是对我最大的鼓励以及不懈努力的肯定。

本文版权归作者和博客园所有,来源网址:http://www.cnblogs.com/CreateMyself/欢迎各位转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利以及小小的鄙视。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值