原文地址:jQuery ajax with asp.net mvc preview 5
原文作者:Chris van de Steeg
最近花了一点时间来将我的jquery4mvc项目更新到preview 5,以适应mvc p4到mvc p5的一些改变。阅读此文请确定阅读了scott’s post 介绍的preview 5的新特性。他也将在不久发布关于ajaxhelpers的文章。如果你想跳过阅读而直接下载jquery4mvc:请点击 codeplex。
jquery4mvc Javascript包只包含了3个javascript文件,并允许使用微软默认的AjaxHelper。你只需要把这3个文件拷贝到你的Content目录中并在head节中引用它们,就可以替代MicrosoftAjax.js和MicrosoftMvcAjax.js。jQuery 可以完美的替代MicrosoftAjax来完成所有的AJAX功能。令人兴奋的一点是,它将对你的ajax链接支持前进与后退按钮。
这样,我们可以继续像以前一样使用AjaxHelper 的功能。虽然在preview 5中AjaxHelpers 有一些变化,如果你没有更新AjaxHelper,你仍然可以通过Scott Hanselman 的文章ASP.NET MVC Preview 4 - Using Ajax and Ajax.Form 的介绍来了解它。需要注意的改变就是在preview 5中你不能在AJAXOptions中使用inline javascript,现在你必须指定方法的名称。你也可以下载整个jQueryMvc项目,它包含了一个网站示例来展示jQueryMvc的特性。
讨论的更多的其实是项目中的.js文件!这个项目的目的是为了当你想创建一个基于mvc的Ajax应用程序时,可以更快的实现并运行它。我们使用了统一的默认的Ioc容器。
我想为你准确的描述这个项目是什么是非常困难的,最好的方式只要浏览一下示例网站的代码,这里我还是作一个简要的介绍。首先,我们有一个DefaultView视图引擎。如果你用[DefaultView] 属性标记你的控制器,如下:
如果你打开示例的/Home/Index,Index视图将默认的被搜索到。如果没有发现它,DefaultView视图引擎将搜索指定的视图名(如示例中的default)。你的视图使用的什么视图引擎没关系,它将为所有的视图工作。可以这样做吗?我们来看一下示例中的视图目录结构。
你可以看到,大部分的视图只有一个以下划线为前缀命名的ascx 文件。因为当action Home/About, Home/SayHello, Home/Index被调用时,这些视图将不会被检索到,DefaultView视图引擎将打开Shared/Default.aspx。
你可以看到,它只是调用了masterpage。但是可以稍微的想一下,你可以为每个controller创建不同的默认页面。像masterpage一样,如下代码:
这个特别的contentplaceholder,像普通的placeholder一样工作。但是,它并不从页面中获取新的内容,它将通过调用视图引擎来打开对就action的对应下划线的视图。所以,如果你调用Home/About,它将调用Home/_About。很神奇吧?其它页面同样,你只需要创建一个ascx文件(或者其它部分假如你使用另外的视图引擎)。这部分视图要被填充到主页面中去。
稍等下,还有更多!如果你使用一个Ajax请求到使用了[AjaxController]属性的controller ,它将只返回.ascx那部分的视图。实在是太好了!与updatepanel 非常相似!
Go to codeplex and download the project to see the ajax-magic I’m so excited about!
源代码也可以到Google code下载:http://code.google.com/p/jquerymvc/source/checkout
XML解析器通常会解析XML文档中的所有文本,例如
<Question>1+1 < 3 吗? </Question>
在 XML 文档中放置了一个类似 "<" 字符,这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。这个时候在 XML 中有 5 个预定义转义字符,分别为:
| < | < | 小于 |
| > | > | 大于 |
| & | & | 和号 |
| ' | ' | 单引号 |
| " | " | 双引号 |
为了防止写文本时对每个以上的字符都进行转义,可以用CDATA区段,CDATA 内部的所有东西都会被解析器忽略。
CDATA 区段开始于 "<![CDATA[",结束于 "]]>",CDATA区段之间不能再包含CDATA(不能嵌套)。如果CDATA区段包含了字符"]]>" 或者"<![CDATA[" ,将会出错,同样要注意在字符串"]]>"之间没有空格或者换行符。
例如我们平时写javascript时,时常也会加上CDATA区段:
<script type=”text/javascript”>
<![CDATA[
function matchwo(a,b) {
if (a < b && a < 0) {
return 1
} else {
return 0 ;}
}
]]>
</script>
.net中的CDATA
System.Xml.XmlCDataSection CDATA 节用于为文本块添加引号或转义符,以防止文本被解释为标记语言。
XmlCDataSection 一般可以由 XmlDocument对象的CreateCDataSection方法创建。
程序写得不少,或多或少都操作过XML,但对XML的一些概念不是完全了解,最近来学习一些XML的基础知识。
XML Namespaces 命名空间
不仔细去看或用到XML的命名空间,我们还是很少去了解他的,也不知道这到底有什么用。
XML 命名空间就像.net程序的命名空间一下,可提供避免元素命名冲突的方法。
何来命名冲突?由于 XML 中的元素名是预定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
这个 XML 文档携带着某个表格中的信息:
<table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table>
这个 XML 文档携带有关桌子的信息(一件家具):
<table> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table>
假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table> 元素,就会发生命名冲突,因为他的语义是不同的,也就是不同的东西,而我们都想把他命名为table。使用前缀来避免命名冲突
此文档带有某个表格中的信息:
<h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table>
此 XML 文档携带着有关一件家具的信息:
<f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>
现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名它们的 <table> 元素 (<h:table> 和 <f:table>)。通过使用前缀,我们创建了两种不同类型的 <table> 元素。
当我们使用 XSL 时,就会看到实际使用中的命名空间。XSL 样式表用于将XML文档转换为其他格式,比如 HTML。
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"></xsl:template>
.net 下的XML操作的命名空间,XmlNamespaceManager 解析集合的命名空间、向集合添加命名空间和从集合中移除命名空间,以及提供对这些命名空间的范围管理,XPath 表达式中的任何前缀都使用提供的 System.Xml.XmlNamespaceManager 进行解析,如下是XPath的简单示例。
Console.WriteLine(x.DocumentElement.NamespaceURI);
XmlNamespaceManager xmlNamespace = new XmlNamespaceManager(x.NameTable);
xmlNamespace.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
Console.WriteLine(x.SelectSingleNode("//xsl:template", xmlNamespace).NamespaceURI);
Console.WriteLine(x.SelectSingleNode("//xsl:template/html", xmlNamespace).NamespaceURI);
Console.ReadLine();






