在usercontrol中将服务器端数据提供给客户端脚本的最佳方法

时间:2013-02-14 20:37:38

标签: javascript asp.net ajax json

我开始构建一个将在某些SharePoint 2007 PageLayouts上运行的UserControl。 UserControl的目的是根据页面名称显示多个位置的地图。因此,它需要做的是获取页面名称,查询SharePoint列表以获取相关的地理坐标集合,然后将其加载到地图上。除了简单修改元素和学术jquery AJAX调用之外,我从未真正做过很多客户端脚本。所以我试图了解传递数据的常见做法。

我在网上看到很多关于AJAX调用页面方法的东西,因为这是一个用户控件。替代方案看起来是对Web服务的ajax调用。我以前构建过Web服务但是供.NET客户端使用。 this仍然是您设置脚本调用的.net Web服务的方式吗?安全性怎么样?如果我只希望我的网页或我的网站呼叫网络服务而不是普通公众,该怎么办?

在这种情况下,我不确定是否需要服务。我可以在初始请求期间检索数据并将其放在页面上吗?像json序列化后面代码中的坐标集并将其写入隐藏字段以便javascript选择的东西?

2 个答案:

答案 0 :(得分:0)

有几种方法可以将值从usercontrol传递到javascript。

ScriptControl:

允许您包含Web控件的客户端行为。请参阅以下链接:
Creating Script Controls
ASP.NET: Create AJAX Server Controls using the ScriptControl base class
Asp.Net Ajax ScriptControl Tutorial

RegisterStartupScript和RegisterClientScriptBlock:

允许您在页面上包含客户端脚本块。请参阅以下链接:
Working with Client-Side Script Injecting Client-Side Script from an ASP.NET Server Control

HtmlGenericControl:

没有什么可以阻止您以动态方式创建脚本标记并将所有javascript逻辑插入InnerHtml属性。它可以在初始请求期间完成。

示例:

HtmlGenericControl script = new HtmlGenericControl("script");
script.ID = "script";
script.Attributes.Add("type", "text/javascript");
script.InnerHtml = "alert('Hey');";

//Insert the script into some asp:Panel
panel.Controls.Add(script);

答案 1 :(得分:0)

4年后读到这篇文章,我可以告诉我过去的自己:

  1. 是的,只需在页面上包含json,隐藏起来供JS使用。但请注意,这会增加必须由客户端浏览器下载的响应大小。这不仅花费更多时间,而且还消耗了更多移动用户的昂贵数据。如果有大量数据且某些数据可能未被使用,则根据需要从Web服务检索数据可能是更好的选择。

  2. REST服务是响应AJAX请求的常用解决方案。如果您想允许匿名用户使用客户端脚本来获取您的数据,那么您无法保护匿名用户的数据。