前言:前面我们已经简单的介绍过了MVC如何Jquery,因为我们如果使用Ajax的话必须要了解Jquery,这篇博客我们将大致了解一下ASP.NET MVC如何使用Ajax的辅助方法,此博客是我的读书笔记,如果那里写的不好,还请各位朋友提出来,我们共同学习。

1.准备工作

(1)在MVC刚开始学习的时候,我们就需要介绍ASP.NET MVC框架中的HTML的辅助方法,但是这类文章现在已经很多了,而且个人感觉很简单,所以没有写笔记,我在这里就不介绍了。

(2)ASP.NET MVC框架中的HTML辅助方法,我们可以使用HTML辅助方法创建表单和指向控制器操作的链接,在ASP.NET MVC框架中还包含一组Ajax辅助方法,它们也可以用来创建表单和指向控制器操作的连接,但不同的是它们是异步进行的,当使用这些辅助方法时,不用编写任何脚本代码来实现程序的异步性。

(3)在后台,这些Ajax辅助方法依赖非侵入式MVC的Jquery扩展,如果使用这些辅助方法,就需要引入脚本文件jquery.unobtrusive-ajax.js,至于怎么引用我在上篇博客已经说过了,这里就不贴出代码了。

2.Ajax的ActionLink方法

(1)在Razor视图中,AJAX辅助方法可以通过Ajax属性访问,和HTML辅助方法类似,Ajax属性上的大部分Ajax辅助方法都是扩展方法(除了AjaxHelper类型之外)。

(2)Ajax属性的ActionLink方法可以创建一个具有异步行为的锚标签。现在我们可以在微软发布的MVC3.0的MusicStore项目上面进行修改,谁如果没有这个项目的话可以加地下的群,然后再群共享里面我共享了这个项目。在视图”Views/Home/Index.cshtml”中添加下面的代码。

@Ajax.ActionLink("点击我", "DailyDeal", new AjaxOptions

{

UpdateTargetId="dailydeal",

InsertionMode = InsertionMode.Replace,

HttpMethod="Get"

})

(3)ActionLink方法的第一个参数指定了连接文本,第二个参数是要异步调用的操作的名称,类似于同名的HTML辅助方法。对于HTML辅助方法和Ajax辅助方法,显著不同的是AjaxOptions参数,该参数指定了发送请求和处理服务器返回结果的方法,参数中还包括用来处理错误,显示加载元素,显示确认对话框等的选项。为了得到服务器的响应,需要在控制器HomeController上添加一个DailyDeal操作,代码如下:

public ActionResult DailyDeal()

{

var album = GetDailyDeal();

return PartialView("_DailyDeal", album);

}

private Album GetDailyDeal()

{

return storeDB.Albums.OrderBy(a => a.Price).First();

}

(4)Ajax操作连接的目标操作的返回值是纯文本或HTML。下面的Razor代码就在项目的Views/Home文件夹下的_DailyDeal.cshtml文件中。

注解:Ajax.ActionLink生成的内容能够获得服务器的响应,并可以直接将新内容移植到页面中,这时为什么呢?下面我们就介绍一下异步操作连接的工作原理。

3.HTML5特性

(1)如果我们查看ActionLink方法渲染的标记,我们会看到如下代码:

点击我

(2)非侵入式JavaScript的显著特点就是在HTML中不包含任何JavaScript代码,也就是说在HTML中看不到脚本代码,如果仔细看的话就会发现ActionLink中指定的所有设置被编码成了HTML元素的特性,并且这些编码的大多数特性都有data-前缀,通常称之为data-特性。

(3)HTML 5规范为私有应用程序保留了data-特性,换句话说,web浏览器不会尝试解释data-特性的内容,因此可以放心的把自己的数据交给它,这些数据不会影响页面的显示或者渲染。

(4)向应用程序中添加jquery.unobtrusive-ajax文件的目的是查找特定的data-特性,然后操纵元素使其表现出不同的行为。

(5)所有的ASP.NET MVC AJAX特性都使用data-特性。

4.Ajax表单

(1)下面我们实现另外一种情形,要在音乐商店的首页为用户添加一个查找艺术家的功能,因为需要用户的输入,所以必须在页面上面放一个form标签,但这不是一个普通的标签,而是一个异步表单。下面这段代码我们看一下:

@using (Ajax.BeginForm("ArtistSearch", "Home", new AjaxOptions

{

InsertionMode = InsertionMode.Replace,

HttpMethod = "GET",

OnFailure = "searchFailed",

LoadingElementId = "ajax-loader",

UpdateTargetId = "searchresults",

}))

{

    

}

(2)再要渲染的表单中,当用户单击提交按钮时,浏览器就会向控制器HomeController的ArtistSearch操作发送异步GET请求,注意上面的代码已经指定了LoadingElementId作为其中的一个选项,当执行异步请求时,客户端框架会自动的显示这个元素,通常情况下,在这个元素内部会出现一个具有动画效果的微调框,来告知用户后台正在进行一些处理,此外,还有一个OnFailure选项,这些选项包括许多参数,可以设置它们以捕获来自Ajax请求的各种客户端事件,如OnBegin,OnComplete,OnSuccess和OnFailure等,可以给这些参数赋予一个JavaScript函数的名称,当事件触发时,调用该函数,上面的代码就为OnFailure指定了一个JavaScript函数,代码如下:

function searchFailed() {

$("#searchresults").html("对不起,查询有问题");

}

(3)如果服务器代码返回一个错误,就意味着AJAX辅助方法都执行失败了,此时,你可能想捕获OnFailure事件,如果用户单击”search”按钮而页面没有反应,我们可能就会感到困惑,跟前面代码所做的一样,可以显示一个错误提示信息,至少让他们知道我们已经尽力了。

(4)辅助方法BeginForm的输出类似于辅助方法ActionLink,最后,当用户单击提交按钮提交表单的时候,服务器会接受到一个Ajax请求,并可能以任意格式的内容作出响应,当客户端收到来自服务器端的响应时,非侵入式脚本就会将相应的内容放入Dom中。

(5)对于这个例子,控制器操作需要查询数据库并且渲染一个分部视图,此外,操作还要返回纯文本,但同时又想把艺术家放到一个列表中,因此,在HomeControler中写入如下的方法代码:

public ActionResult ArtistSearch(string q)

{

var artists = GetArtists(q);

return PartialView(artists);

}

private List GetArtists(string q)

{

return storeDB.Artists.Where(a => a.Name.Contains(q)).ToList();

}

(6)该分部视图利用模型构建列表,它位于项目的Views/Home文件夹下的视图ArtistSearch.cshtml。

@model IEnumerable

@{

Layout = null;

}

ArtistSearch

@foreach (var item in Model)

{

@item.Name

}

5.web.config文件里的AJAX设置

(1)默认情况下,非侵入式JavaScript和客户端验证在ASP.NET MVC应用程序中是启用的,然后,我们可以通过web.config文件中的设置改变这些行为,如果打开新应用程序根目录下的web.config文件,就会看到下面的appSettings配置节点:

(2)如果想在整个应用程序中禁用这两个特性中的任意特性,只需要将响应特性的value值修改为false即可,另外,还可以逐视图是的控制这些设置,HTML辅助方法EnableClientValidation和EnableUnobtrusiveJavaScript在一个具体视图中重写了这些配置设置。

(3)由于现有的自定义脚本都是依赖与Microsoft AJAX库而不是Jquery库,因此禁用这些特性的主要原因是维护应用程序的向后兼容性。

注:下篇MVC的博客我们将把注意力转向ASP.NET MVC框架的另外一个内置AJAX特性-对客户端验证的支持。

作者:韩迎龙

出处:http://www.cnblogs.com/hanyinglong

asp.net+mvc+html辅助,ASP.NET MVC使用Ajax的辅助的解决方法相关推荐

  1. php 插件加载不出来了,织梦第三方响应式后台辅助插件不显示新模块和插件的解决方法...

    网络上很多织梦后台模板看起来挺好看但是很多地方写的不够智能完善,都是织梦后台模板左侧辅助插件写死,明明上传和安装了新的模块和插件,但是辅助插件选项里还是没有显示. 今天这篇教程 ,我们针对T10模板不 ...

  2. ASP.NET AjaxPro的应用 .AjaxPro使用中“XXX未定义”的一种解决方法(转载的)

    ASP.NET AjaxPro的应用 1.首先下载AjaxPro组件.并将AjaxPro.dll引用到网站(或项目). 2.修改Web.config.在 <system.web> 元素中添 ...

  3. ASP.NET使用Coolite.Ext.Web.dll,显示ext未定义的解决方法

    开发系统时用到Coolite.Ext.Web.dll,起初使用Windows Server 2003进行的开发,测试都没有问题.后来装了Windows Server 2008,再进行开发此时是,总显示 ...

  4. “超过响应缓冲区限制”“此 ASP 页的执行造成响应缓冲区超过其配置限制”问题的解决方法总结

    1.根据以往的经验以为是缓冲池的缘故.于是我新建一个缓冲池之后(尽量大的配置)发现问题依旧 2.修改查询语句 select * from table 改成 select top 500 * from ...

  5. cf登录游戏只显示服务器的字体,cf辅助灭天大神修复文件字体花样请求解决方法...

    cf冰易辅助小编解说硬盘分区魔术师解答方法 在操作体系的历程中会碰见林林总总的问题,比方最常常见文件字体花样请求的状况,许多用户都是初次遇到文件字体花样请求这类状况,所以人人都没有好的处置惩罚要领,怎 ...

  6. ASP.NET MVC如何使用Ajax的辅助方法

    前言:前面我们已经简单的介绍过了MVC如何Jquery,因为我们如果使用Ajax的话必须要了解Jquery,这篇博客我们将大致了解一下ASP.NET MVC如何使用Ajax的辅助方法,此博客是我的读书 ...

  7. 使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model

    使用Mono.Cecil辅助ASP.NET MVC使用dynamic类型Model 2011-09-06 00:21 by 老赵, 8645 visits 这也是之前在珠三角技术沙龙上的示例之一,解决 ...

  8. ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点

    参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...

  9. 学习笔记 --- 工厂、单体、适配器、策略、观察者、MVC设计模式及ASP.NET MVC开发模式、关闭缓存的方法...

    关于工厂.单体.适配器.策略.观察者没啥好说的, 代码中有说明 //DesignPattern.cs View Code using System; using System.Collections. ...

最新文章

  1. php中RGB转十六进制、十六进制转RGB
  2. 沙老师的作业系列——Crudd‘s Crack Head
  3. 读书笔记_探索式测试_混合探索式测试
  4. Maven Scope取值的含义
  5. android ocr识别源码_身份证识别OCR解决手动输入繁琐问题
  6. 动态规划入门(一)——数字三角形
  7. php如何用菜刀连接getshell,phpmyadmin之getshell总结
  8. nginx+tomcat+memcached
  9. Maven的pom.xml文件详解
  10. python计算化学浓度_理论与计算化学 - 计算模拟 - 程序代码 - 小木虫论坛-学术科研互动平台...
  11. 百年通信史:落后西方半世纪的中国,用20年绝地反杀!
  12. 项目验收测试是什么意思?项目检测具体流程有哪些?
  13. 为什么没人比程序员更讨厌软件
  14. attention方式的算法
  15. oracle 查看用户日志,Oracle查看用户操作sql语句以及数据库日志
  16. SpringBoot 项目@Value 注解取不到值
  17. 操作系统|时间片轮转调度算法(RR)
  18. 《Linux指令从入门到精通》——4.2 Linux下的简单文字模式文本编辑器
  19. 【C++要笑着学】类和对象 | 初识封装 | 访问限定符 | 类的作用域和实例化 | 类对象模型 | this指针
  20. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day19】—— 集合框架3

热门文章

  1. 用python做时间序列预测八:Granger causality test(格兰杰因果检验)
  2. Ubuntu16.04分辨率过低,无法调高
  3. scratch算立方根
  4. 大学生python实验心得体会_大学生实训心得体会3篇
  5. 【问题描述】输入一行字符串,含有数字和非数字字符以及空格等,如: df23adfd56 2343?23dgjop535 如果将其中所有连续出现的数字视为一个整数,要求统计在该字符串中共有多少个整数,并
  6. 四种存储结构及其特点
  7. 2022-2028全球与中国锂电池用PVDF市场现状及未来发展趋势
  8. 微信8年,这几个冷知识你都知道吗?想必知道的人也不多吧
  9. 【程序包uti1不存在怎么办?】求解答
  10. 1bit和1byte_Bit和Byte的区别及单位换算