在DotNetNuke网站上,可以使用许多优秀的 JavaScript 控件和库,但通常不会这么做,因为它们需要从服务器加载数据,如文本、JSON、XML 等格式。用户操作后,可能希望更新数据库中的数据,但又不想重新加载页面。那么,如何将数据传递给客户端脚本呢?使用 Visual Studio 会带来很大的开销:需要测试环境,必须计划部署等。如果网站规模较小,预算有限,那么可能不会对此感到满意。但有一种方法可以快速实现,无需编译、部署、测试环境等繁琐步骤。
要完成此操作,需要执行以下三个步骤:
所有这些都可以轻松地使用DotNetNuke的基于浏览器的开发环境 - XsltDb 来完成。下面将展示两种从服务器向客户端传递数据的方法:使用AJAX和提供 URL。
这是在客户端想要实现的:
getSomeDataFromServer(a, b, c, function(downloadedData){
someControl.data = downloadedData;
});
某个函数发送一些参数到服务器,并在完成后调用回调函数。要创建这样的函数,使用 XsltDb。在需要此 JavaScript 函数的页面上放置一个新的 XsltDb 模块,并写入以下代码:
##handler: getUsers(searchKey)
<xsl:copy-of select="mdo:sql('select UserID, DisplayName from {databaseOwner}[{objectQualifier}Users] where Username like @searchKey ', 'user', '@searchKey', mdo:request('searchKey'))"/>
就是这样!上面提到的三个步骤都完成了。
注意!这个模块必须是一个超级模块(代码编辑器上方的复选框),因为它直接访问数据库。这个函数通过 DisplayName 搜索用户。用法如下:
alert(getUsers('%bu%'));
/*
同步
*/
getUsers('%bu%', function(users){
/*
异步
*/
alert(users);
});
再次,在页面上放置一个新的 XsltDb 模块。粘贴以下代码并检查“超级模块”选项:
<xsl:if test="mdo:request('service')">
<xsl:copy-of select="mdo:sql('select UserID, DisplayName from {databaseOwner}[{objectQualifier}Users] where Username like @searchKey ', 'user', '@searchKey', mdo:request('searchKey'))"/>
</xsl:if>
在配置上方的别名字段中填写“users”。之后,可以按如下方式使用该服务:
$.get('/DesktopModules/XsltDb/ws.aspx?service=users&searchKey=' + escape('%bu%'), function(xml){
alert((new XMLSerializer()).serializeToString(xml));
});