【问题标题】:How do I initialise a silverlight control without using web service call如何在不使用 Web 服务调用的情况下初始化 Silverlight 控件
【发布时间】:2010-01-05 20:31:54
【问题描述】:

我正在开发一个 asp.net mvc web 应用程序,它大量使用 jquery 和渐进增强原理。

我需要一个复杂的控件,该控件需要访问 .net 代码才能运行(使用跨多个类的反射)。选择是在 javascript 中复制此代码(如果可能,自动生成),或使用 silverlight。我将使用 silverlight 选项(至少对于 V1)。

我的控件的预silverlight 版本以一些简单的html 元素开始生命,这些元素被jquery 修改为更丰富的版本。但是,一旦页面加载以获取其数据,我所见过的silverlight控件示例都会回调服务器。或者,如果此数据很简单,则使用 initParams 参数。

我的初始化数据要复杂得多,我认为 initParams 可以使用,我不想回调服务器,因为我已经有了这些数据。

那么我最好的选择是什么?

【问题讨论】:

    标签: jquery asp.net-mvc silverlight


    【解决方案1】:

    您可以将任何您想要的内容放入 initParams。它只是一个字符串,但如果您有一个复杂的对象要传递给 silverlight 控件,那么您可以将对象序列化为字符串,将其输入 initParams,然后在 silverlight 控件中反序列化。

    或者,您知道您可以从 javascript 与 silverlight 控件中的托管代码进行通信(函数必须用 ScriptableMember 属性标记)?

    更不用说您不应该关心从 silverlight 控件返回到 WCF 或 asmx Web 服务的调用 - 根据我的经验,除非您传输大量数据,否则调用速度非常快。

    【讨论】:

    • 感谢您的回复。将对象序列化为字符串以作为属性放入 silverlight 对象会起作用,但对我来说听起来有点恶心。这是常见的做法吗?我并不真正关心回调的时间延迟,我只是从数据库中提取数据,将其放在网页上,然后在客户端上丰富它。我不想仅仅为了一个控件就打破那个模型? javascript 方法是我正在寻找的地方,我只是想知道通常会做什么,或者我是否遗漏了什么。
    • @Chris:很难定义什么是“普通”,因为 SL 相对较新并且仍在快速发展。然而,将大量数据放入 initParams 确实有一种“难闻的气味”,我自己不会这样做。在您的场景中,更典型的(如果已经存在这样的东西)可能是一个 AJAX HTML 页面,它使用 Silverlight 插件丰富了自身。在这两种情况下,数据请求与演示代码的加载是分开发生的,并且很可能共享一个提供数据的公共服务。
    • 将对象序列化到 initParams 中并不常见,它只是一种选择。 initParams 是为您的 silverlight 控件绝对需要开始的基本内容而设计的。就我个人而言,我宁愿依赖前面提到的 web 服务调用,无论是直接来自 silverlight 控件还是来自 ajax 和 javascript 桥。
    【解决方案2】:

    在您描述的场景中,您可以使用 Silverlight 中的HTMLBridge 在您的页面中调用可以提供复杂数据的 javascript 函数。 Silverlight 具有用于处理 XML 和 JSON 的库,但是,当您将数据加载到强类型模型中时,Silverlight 数据绑定变得更加有用。

    【讨论】:

    • 这听起来很有趣,谢谢。我已经将我的对象作为 js 类,所以我可以让 silverlight 调用 js 函数,获取这些值并自行设置。我会调查的。
    猜你喜欢
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多