在Asp.net MVC中,我们能非常方便的使用Ajax。这篇文章将介绍三种Ajax使用的方式,分别为原始的Ajax调用、Jquery、Ajax Helper。分别采用这三种方式结合asp.net mvc去实现一个史上最简单的留言板。

首先看一下原始的Ajax的调用的:

定义CommentController,代码如下:

publicclassCommentController : Controller

{privateIList_comments=newList();publicActionResult Index()

{returnView();

}publicvoidAddCommentServer()

{stringcomment=Request["comment"].ToUpper();

_comments.Add("

"+comment+"");

Response.ContentType="text/html";

Response.Write(string.Join("\n", _comments.ToArray()));

}

}

在Asp.net MVC中添加一个custom_ajax.js,加入下面使用ajax的脚本代码,调用AddCommentServer方法。

function getXmlHttpRequest() {

var xhr;//check for IE implementation(s)if(typeofActiveXObject!='undefined') {try{

xhr=newActiveXObject("Msxml2.XMLHTTP");

}catch(e) {

xhr=newActiveXObject("Microsoft.XMLHTTP");

}

}elseif(XMLHttpRequest) {//this works for Firefox, Safari, Operaxhr=newXMLHttpRequest();

}else{

alert("对不起,你的浏览器不支持ajax");

}returnxhr;

}

function getMessage() {//get our xml http request objectvar xhr=getXmlHttpRequest();//prepare the requestxhr.open("GET","Comment/AddCommentServer?comment="+document.getElementById("Comment").value,true)//setup the callback functionxhr.onreadystatechange=function() {//readyState 4 means we're doneif(xhr.readyState!=4)return;//populate the page with the resultdocument.getElementById('comments').innerHTML=document.getElementById('comments').innerHTML+xhr.responseText;

};//fire our requestxhr.send(null);

}

在View中引入此脚本,创建一个简单的表单,并添加触发的代码:

Comments

Add Comment

效果如下:

第二种方式:利用Jquery:

在控制器中添加代码IndexJquery方法和AddComment方法的代码,CommentController代码如下所示:

publicclassCommentController : Controller

{privateIList_comments=newList();publicActionResult Index()

{returnView();

}publicActionResult IndexJquery()

{returnView();

}publicActionResult AddComment(stringcomment)

{

_comments.Add("

"+comment+"");returnContent(string.Join("\n", _comments.ToArray()));

}publicvoidAddCommentServer()

{stringcomment=Request["comment"].ToUpper();

_comments.Add("

"+comment+"");

Response.ContentType="text/html";

Response.Write(string.Join("\n", _comments.ToArray()));

}

}

根据IndexJquery,创建View表单IndexJquery.aspx:

Comments

Add Comment

在View中引用Jquery:

添加下面脚本:

});

});

function hijack(form, callback, format) {

$("#indicator").show();

$.ajax({

url: form.action,

type: form.method,

dataType: format,

data: $(form).serialize(),

completed: $("#indicator").hide(),

success: callback

});

}

function update_sessions(result) {//clear the form$("form.hijax")[0].reset();

$("#comments").append(result);

}

效果:与方式一效果一样。

第三种方式:Ajax Helper

将最简单的留言板修改成Ajax Helper的方式。

1、首先了解一下Ajax Helper下面四种方法。

a、Ajax.ActionLink():它将渲染成一个超链接的标签,类似于Html.ActionLink()。当它被点击之后,将获取新的内容并将它插入到HTML页面中。

b、Ajax.BeginForm():它将渲染成一个HTML的Form表单,类似于Html.BeginForm()。当它提交之后,将获取新的内容并将它插入到HTML页面中。

c、Ajax.RouteLink():Ajax.RouteLink()类似于Ajax.ActionLink()。不过它可以根据任意的routing参数生成URL,不必包含调用的action。使用最多的场景是自定义的IController,里面没有action。

d、Ajax.BeginRouteForm():同样Ajax.BeginRouteForm()类似于Ajax.BeginForm()。这个Ajax等同于Html.RouteLink()。

这个例子中使用Ajax.BeginForm(),下面具体了解Ajax.BeginForm()的参数。看下面代码:

{

HttpMethod="POST",

UpdateTargetId="comments",

InsertionMode=InsertionMode.InsertAfter

})) {%>

actionName:AddComment(action的名字)

controllerName:CommentController(Controller的名字)

ajaxOptions:

HttpMethod:Ajax的请求方式,这里为POST

UpdateTargetId :Ajax请求的结果显示的标签的ID,这里为comments

InsertionMode:将Ajax结果插入页面的方式,这里将ajax的结果放置到comments的后面

2、实现:

在CommentController中添加IndexAjaxHelp方法。

publicActionResult IndexAjaxHelp()

{returnView();

}

根据IndexAjaxHelp生成View表单IndexAjaxHelp.aspx,定义表单:

Comments

{

HttpMethod="POST",

UpdateTargetId="comments",

InsertionMode=InsertionMode.InsertAfter

})) {%>Add Comment

要在此View中添加下面两个脚本文件:

这样就行了,我们发现比用Jquery方便很多,但是使用Jquery将灵活很多。

3、效果:和方式一样。

总结:本文非常的简单,在asp.net mvc中实现了3中ajax的调用方式,实现了一个最简单的留言板程序。推荐使用Jquery和Ajax Helper这两种。Ajax Helper使用非常简单,Jquery比较灵活。

更新:三种方式都实现了一个最简单的留言板程序

参考:

ASP.NET MVC 2 In Action

Pro ASP.NET MVC 2 Framework, Second Edition

c .net ajax,Asp.net mvc 2中使用Ajax的三种方式相关推荐

  1. android获取自定义属性,android 自定义控件中获取属性的三种方式(转)

    第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值. (1)在xml文件中设置属性值 android:layout_width="f ...

  2. Django中Model继承的三种方式

    Django中Model继承的三种方式 Django中Model的继承有三种: 1.抽象继承 2.多表继承 3.proxy model(代理model) 1.抽象继承 第一种抽象继承,创建一个通用父类 ...

  3. UE4学习-在虚幻编辑器中打开VS的三种方式

    文章目录 方式一 方式二 方式三 在虚幻编辑器中打开VS的三种方式 方式一 在文件浏览器这里,选择C++类,然后在文件夹内,找到一个和截图中类似的图标,双击,即打开vs,并在vs中打开这个类的代码. ...

  4. Java中实现接口的三种方式您造吗?

    本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...

  5. java中实现多线程的三种方式

    java中实现多线程的三种方式 1.实现多线程的方法: 在java中实现多线程的两途径:继承Thread类,实现Runable接口(Callable) 2.继承Thread类实现多线程: ​ 继承类T ...

  6. java类初始数组_java中数组初始化的三种方式是什么

    java中数组初始化的三种方式是:1.静态初始化,如[int a[] = {2, 0, 1, 9, 2020}]:2.动态初始化,如[int[] c = new int[4]]:3.默认初始化,如[i ...

  7. 【查看linux中所有用户的三种方式】

    查看linux中所有用户的三种方式学习目标: 提示:通过使用 /etc/passwd 文件,getent 命令,compgen 命令这三种方法查看系统中用户的信息 用户信息存放位置: 提示:Linux ...

  8. java中Map遍历的三种方式

    Java中Map遍历的三种方式 前言 一:在for循环中使用entries实现Map的遍历: 二:在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能 ...

  9. JavaScript概述和HTML中嵌入JavaScript的三种方式

    "成功没有捷径,脚踏实地一步一个脚印,该来的总会来,不好高骛远,不急功近利,付出总会有回报,不管处于哪个阶段,都要一步一个脚印,踏实的走好每一步!" 目录 01.JavaScrip ...

最新文章

  1. Java NIO 系列教程 转
  2. 如何修改textarea中placeholder的字体
  3. 手写实现简单的Vue事件总线
  4. Redis数据类型--散列类型
  5. kubectl logs -f tail 显示100_系统管理员应该知道的9个kubectl命令
  6. 原创 | 开源AI测试专题、Jmeter测试专题
  7. 关于求XXX.class.getResource(xxx).getPath()的用法
  8. python立体匹配误匹配率_立体匹配算法(Stereo Matching)及其在OpenCV中的应用
  9. ROS之choro功能包
  10. 关于中国移动宽带(中国铁通)比较卡
  11. 2022年工作日节假日数据
  12. 解决 Win7 远程桌面 已停止工作的问题
  13. 13位知名科技公司CEO首份工作揭秘
  14. 《愤怒的小鸟大电影》分析报告
  15. linux配置网口的ip地址,Linux基本操作和基础命令(Linux修改IP地址以及修改网卡地址)...
  16. Java多线程学习详细学习及扩展
  17. 安卓手机存储卡使用技巧。
  18. 了解如何使用 Mac 或 PC 同步音乐、影片(新系统不用iTunes)
  19. 我在用的翻译软件,微软翻译,网易有道词典
  20. 华为机试---年终奖(动态规划)

热门文章

  1. 【Spark】SparkStreaming-Kafka-Redis-集成-基础参考资料
  2. 删除目录软链接注意事项
  3. 12_04_Linux软件管理之四yum
  4. 北京尚学堂|程序员的智慧
  5. 闭包/Block当成函数参数实现回调
  6. php 递归创建目录、递归删除非空目录、迭代创建目录
  7. C#实现简单的 Ping 的功能,用于测试网络是否已经联通
  8. arcgis镜像图形工具,ArcGis图形编辑
  9. java用接口实例化对象_[求助]迷茫中,接口可以直接实例化对象吗?
  10. leetcode 493. 翻转对(分治算法)