如何利用ASP.NET和AJAX解决手工拼接HTML问题

发布时间:2021-07-12 16:02:53 作者:chen
来源:亿速云 阅读:198

这篇文章主要讲解了“如何利用ASP.NET和AJAX解决手工拼接HTML问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用ASP.NET和AJAX解决手工拼接HTML问题”吧!

Sys.UI.DataView

为了解决展示数据的问题,我们需要用到一个全新的客户端控件,那就是Sys.UI.DataView了,简称DataView。我们会用DataView替换掉上一篇文章中所说到的人手拼接HTML的部分,用于迭代生成一个ul中的li元素,因此看起来是把DataView当作Repeater来用。实际上,DataView的功能类似于ListView加上DetailsView。

如果你把一个Array绑定到DataView上,它会显示为一个ListView。与ListView的LayoutTemplate相类似的是,它也能够定义控件展示的整体布局,并且仅仅是迭代输出其中的一小部分。例如说,编写一个有thead的table,并且仅仅是迭代输出thead之后的tr。在这方面,是DataView和ListView完全一致的。***不同的是,客户端暂时还没有DataPager这样的控件,所以DataView必须一次性的完整显示整个Array的数据。

如果你把单个Object绑定到DataView上,它就会显示为一个DetailsView。这使得你可以使用两个DetailsView就做出经典的Master-Details展示模式,和在服务器端分别用ListView和DetailsView做出来的一样。当然,你不能指望DataView能够好像DetailsView那样,自动帮你分析每一个数据项并映射出对应的HTML模板,因此HTML模板还是要你自己手写的,但至少那是在HTML中编写模板,编写时能够享受IDE带来的各种好处,维护时也更容易看懂自己(或别人)原来写下的HTML。

JavaScript语法

接下来,我们就要把DataView投入到实际应用中去了。首先,我们说一下如何用JavaScript来实例化一个DataView。有编写ASP.NET AJAX客户端代码经验的人对$create应该不会觉得陌生,因为DataView继承自Sys.UI.Control,我们仍然可以用$create来实例化它。不过,在此之前,我们先要把对应的HTML编写好:

<ul id="itemTemplate" class="sysTemplate">
<li>
<span class="award">{{ Award }}</span>
<span class="winner">{{ Winner }}</span>
<span class="film">{{ Film }}</span>
</li>
</ul>

然后我们就可以基于itemTemplate这个HTML元素创建控件了:

$create(Sys.UI.DataView, {
dataSource: new Sys.Data.AdoDataSource(),
serviceUri: "WebDataService.svc",
query: "OscarWinners"
}, {}, {}, $get("itemTemplate"));

现在,页面显示出来的结果和之前我们人手拼接HTML的版本完全一致,不过我们已经不在需要维护嵌入在JavaScript中的HTML代码了。

声明性语法

如果你觉得上面的做法还不够好,要在pageLoad()里面写一个$create,那么声明性语法可能正是你需要的。大家应该记得很久很久之前,在ASP.NET AJAX还叫做Atlas的时候,就已经有过声明性语法的设计,那就是xml-script。不知为何,后来Microsoft放弃了这一设计,现在声明性语法又回来了,而且设计得比以前的xml-script还要更好。假如不用$create的话,通过声明性语法实例化一个DataView仅需要这样做:

<BODY
<body
xmlns:sys="javascript:Sys"
xmlns:dataView="javascript:Sys.UI.DataView"
sys:activate="*">
<ul id="itemTemplate" class="sysTemplate"
sys:attach="dataView"
dataView:datasource="{{ new Sys.Data.AdoNetDataSource() }}"
dataView:serviceuri="WebDataService.svc"
dataView:query="OscarWinners">
<li>
<span class="award">{{ Award }}</span>
<span class="winner">{{ Winner }}</span>
<span class="film">{{ Film }}</span>
</li>
</ul>
</body>

我们所需要更改的代码包括:在body元素上声明有关的xmlns,将JavaScript中的名字空间映射到HTML上,或者你可以理解为映射到XML/XHTML上。

通过sys:activate="*"这个声明,让ASP.NET AJAX知道它需要去解释页面上所有的声明性语法,并激活对应的组件.将原本使用$create初始化时传递给实例的属性、事件、引用改为用声明性语法,直接写在HTML元素的定义上.经过这三步,我们就可以将原来使用$create创建的组件改为使用声明性语法创建了。

小结

DataView使得我们能够使用HTML模板,来避免手工拼接HTML带来的种种问题,同时声明性语法让我们能够如同声明服务器端控件一样声明客户端组件。虽然在ASP.NET AJAX 4.0 Preview 3中这些功能仍有小bug,例如我想用声明性语法创建我自己编写的InPlaceEditoBehavior,这在初始化阶段毫无问题,但却会在页面卸载销毁对象之时抛出脚本错误。

由于我觉得ASP.NET AJAX 4.0 Preview 4很快就要出来了,所以我也就不准备去深入研究Preview 3了,等Preview 4出来了再去好好看看源代码。

感谢各位的阅读,以上就是“如何利用ASP.NET和AJAX解决手工拼接HTML问题”的内容了,经过本文的学习后,相信大家对如何利用ASP.NET和AJAX解决手工拼接HTML问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 利用js拼接html字符串的方法
  2. jquery拼接ajax 的json和字符串拼接的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

asp.net ajax html

上一篇:Kafka安装部署方法及简单命令

下一篇:如何使用批处理修改web打印设置笔记

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》