在Asp.net MVC中使用Asp.net Ajax
2008-08-17 22:49
507 查看
该篇文章是Stephen Walther博客中的文章,个人觉得不错就翻译了一下。但由于个人英语水平有限,还望各位海量。如果想看原文,请点击Using ASP.NET AJAX with ASP.NET MVC 查看原文。
是的,你能够在Asp.net MVC中使用Asp.net Ajax。最近很多人问我怎样在Asp.net MVC的View中使用Asp.net Ajax。本Blog条目中,我会解释这个问题并提供解决方案。
问题:
通常的,如果你要在Asp.net的页面中使用Asp.net Ajax,你需要在页面中添加ScriptManager控件。而ScriptManager控件需要运行在服务器端标识(server-side)的Form控件中。因此,为了使用ScriptManager控件,你必须要使用包含一个服务器端标示(server-side)的Form的页面。
这就造成了问题。你不应该在Asp.net MVC的view中包含服务器端标示(server-side)的Form控件。为什么呢?使用服务器端标示(server-side)的form控件意味着这个添加的form控件迫使你使用postbacks和viewstate而回到Web Form页面编程模型,这就违背了Asp.net MVC的精神。因此很多人断定Asp.net Ajax不能合适与Asp.net MVC。
解决方案:
解决方案非常简单,就是不使用ScriptManager控件,而用包含Microsoft Ajax Liberty标准的<script src=”MicrosoftAjax.js”></script>标示替换。
你可以从下面的网址中下载Microsoft Ajax Liberty的单独版本。http://www.asp.net/ajax/downloads/
下载包中包含若干个版本的Microsoft Ajax Liberty。最重要的是二个名为MicrosoftAjax.js 和MicrosoftAjax.debug.js的Scripts(下载包中也包含本地化的Microsoft Ajax Liberty版本)。MicrosoftAjax.js脚本库是一个成品(压缩版),而MicrosoftAjax.debug.js是用于调试的脚本库(调试版)。
你可以拷贝MicrosoftAjax.js 和MicrosoftAjax.debug.js脚本库到你的Asp.net MVC 页面应用程序。放置这些脚本库合适场所是在Asp.net MVC程序中的内容文件夹中。在你向你的项目中添加这些脚本库后,你可以在你的View(或者在Master Page中)中引用压缩版或调试版的任一一个版本。
例如在列表一中使用Microsoft Ajax库为button按钮添加一个handler
Code
<head runat="server">
<title>Test UpdatePanal</title>
<script language="javascript" type="text/javascript" src="/Content/MicrosoftAjax.debug.js"></script>
<script language="javascript" type="text/javascript">
function updatePage(executer, e) {
if (executer.get_responseAvailable()) {
$get("up1").innerHTML = executer.get_responseData();
}
else {
if (executer.get_timeOut())
alert("Timed Out");
else if (executer.get_aborted())
alert("Aborted");
}
}
function getContent(url) {
var request = new Sys.Net.WebRequest();
request.set_url(url);
request.set_httpVerb("GET");
request.add_completed(updatePage);
request.invoke();
}
function pageLoad() {
$addHandler($get("btn1"), "click", function() { getContent("test1.htm") });
$addHandler($get("btn2"), "click", function() { getContent("test2.htm") });
}
</script>
</head>
<body>
<div>
<input id="btn1" type="button" value="Content 1" />
<input id="btn2" type="button" value="Content 2" />
<div id="up1" ></div>
</div>
</body>
列表四,pageL()方法是用来连接页面中的两个button和Javascript的getContent()函数。当你点击第一个button时,Url地址"test1.htm"被传送到getContent()方法中。当你点击第二个button时,Url地址"test2.htm"被传送到getContent()方法中。
getContent()方法执行所有的工作。在这个方法中,一个WebRequest对象被创建。这个对象的两个属性被设置:Url和Http Verb。当WebRequest处理程序被设置后,WebRequest对象被请求时updatePage()方法被调用。
updatePage()方法简单更新了名为up1的Div标签中的内容。
结论:
这篇Blog文章的目的是解释怎样在一个MVC页面程序中使用Microsoft Ajax库。我是通过怎样添加Script引用、怎样添加Service引用和实现在没有ScriptManager或UpdatePanel控件下页面的局部更新解释Asp.net Ajax也能Asp.net MVC中使用。
是的,你能够在Asp.net MVC中使用Asp.net Ajax。最近很多人问我怎样在Asp.net MVC的View中使用Asp.net Ajax。本Blog条目中,我会解释这个问题并提供解决方案。
问题:
通常的,如果你要在Asp.net的页面中使用Asp.net Ajax,你需要在页面中添加ScriptManager控件。而ScriptManager控件需要运行在服务器端标识(server-side)的Form控件中。因此,为了使用ScriptManager控件,你必须要使用包含一个服务器端标示(server-side)的Form的页面。
这就造成了问题。你不应该在Asp.net MVC的view中包含服务器端标示(server-side)的Form控件。为什么呢?使用服务器端标示(server-side)的form控件意味着这个添加的form控件迫使你使用postbacks和viewstate而回到Web Form页面编程模型,这就违背了Asp.net MVC的精神。因此很多人断定Asp.net Ajax不能合适与Asp.net MVC。
解决方案:
解决方案非常简单,就是不使用ScriptManager控件,而用包含Microsoft Ajax Liberty标准的<script src=”MicrosoftAjax.js”></script>标示替换。
你可以从下面的网址中下载Microsoft Ajax Liberty的单独版本。http://www.asp.net/ajax/downloads/
下载包中包含若干个版本的Microsoft Ajax Liberty。最重要的是二个名为MicrosoftAjax.js 和MicrosoftAjax.debug.js的Scripts(下载包中也包含本地化的Microsoft Ajax Liberty版本)。MicrosoftAjax.js脚本库是一个成品(压缩版),而MicrosoftAjax.debug.js是用于调试的脚本库(调试版)。
你可以拷贝MicrosoftAjax.js 和MicrosoftAjax.debug.js脚本库到你的Asp.net MVC 页面应用程序。放置这些脚本库合适场所是在Asp.net MVC程序中的内容文件夹中。在你向你的项目中添加这些脚本库后,你可以在你的View(或者在Master Page中)中引用压缩版或调试版的任一一个版本。
例如在列表一中使用Microsoft Ajax库为button按钮添加一个handler
Code
<head runat="server">
<title>Test UpdatePanal</title>
<script language="javascript" type="text/javascript" src="/Content/MicrosoftAjax.debug.js"></script>
<script language="javascript" type="text/javascript">
function updatePage(executer, e) {
if (executer.get_responseAvailable()) {
$get("up1").innerHTML = executer.get_responseData();
}
else {
if (executer.get_timeOut())
alert("Timed Out");
else if (executer.get_aborted())
alert("Aborted");
}
}
function getContent(url) {
var request = new Sys.Net.WebRequest();
request.set_url(url);
request.set_httpVerb("GET");
request.add_completed(updatePage);
request.invoke();
}
function pageLoad() {
$addHandler($get("btn1"), "click", function() { getContent("test1.htm") });
$addHandler($get("btn2"), "click", function() { getContent("test2.htm") });
}
</script>
</head>
<body>
<div>
<input id="btn1" type="button" value="Content 1" />
<input id="btn2" type="button" value="Content 2" />
<div id="up1" ></div>
</div>
</body>
列表四,pageL()方法是用来连接页面中的两个button和Javascript的getContent()函数。当你点击第一个button时,Url地址"test1.htm"被传送到getContent()方法中。当你点击第二个button时,Url地址"test2.htm"被传送到getContent()方法中。
getContent()方法执行所有的工作。在这个方法中,一个WebRequest对象被创建。这个对象的两个属性被设置:Url和Http Verb。当WebRequest处理程序被设置后,WebRequest对象被请求时updatePage()方法被调用。
updatePage()方法简单更新了名为up1的Div标签中的内容。
结论:
这篇Blog文章的目的是解释怎样在一个MVC页面程序中使用Microsoft Ajax库。我是通过怎样添加Script引用、怎样添加Service引用和实现在没有ScriptManager或UpdatePanel控件下页面的局部更新解释Asp.net Ajax也能Asp.net MVC中使用。
相关文章推荐
- ASP.NET中MVC使用AJAX调用JsonResult方法并返回自定义错误信息
- ASP.NET中MVC使用AJAX调用JsonResult方法并返回自定义错误信息
- Asp.net mvc 使用Ajax调用Action 返回数据。
- asp.net mvc AjaxBeginForm结合Partial使用
- JQuery文件上传插件ajaxFileUpload在Asp.net MVC中的使用
- Asp.net MVC中使用JQuery插件ajaxFileUpload上传文件
- ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)
- asp.net MVC 使用JQuery.Ajax
- 方法代码ASP.NET MVC如何使用Ajax的辅助方法
- ASP.NET MVC 入门11、使用AJAX
- ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)
- asp.net中mvc使用ajax提交参数的匹配问题解决探讨
- 使用jQuery.Ajax向ASP.NET MVC控制器Post数据
- ASP.NET MVC使用ajax向控制器post Model 研究
- ASP.NET MVC 入门11、使用AJAX
- ASP.NET MVC (CTP) - 在MVC中使用AJAX
- asp.net mvc 使用ajax请求 控制器 (PartialViewResult)分部的action,得到一个分部视图(PartialView)的HTML,进行渲染
- ASP.NET MVC 入门11、使用AJAX 【转】
- Asp.net mvc 在使用 jquery ajax Delete 时 404 Not found
- ASP.NET MVC 音乐商店 - 8. 使用 Ajax 更新的购物车