2009-06-21 20 views
0

所以,我想从我的ASP.NET网页上的一些数据创建一些Silverlight图表。要做到这一点,使用Visifire(我目前的事情)或即将到来的Silverlight charting,似乎是创建一些XAML或至少一些Silverlight对象(like in this Visifire sample),然后以某种方式将它们填充到页面中。有没有办法使用ASP.NET代码隐藏将Silverlight XAML插入到我的页面中?

奇怪的是,唯一能做到这一点的方法似乎是通过JavaScript!也就是说,我必须这样做:

用户 - >单击按钮 - > JavaScript事件处理程序 - > AJAX调用从服务器端方法获取XAML - >将XAML字符串填充到客户端 - 双面HTML(如this in generallike this for a Visifire-specific method)。

这非常不直观!我宁愿有就是做这样的事情,里面MyPage.aspx.cs能力:这将是更加美好

protected void MyButton_Click(object sender, EventArgs e) 
{ 
    this.MyFictionalSilverlightControl.Xaml = this.GenerateXamlFromData(); 
} 

!我很高兴MyFictionalSilverlightControlUpdatePanel之内,尽管效率很低;我只是希望我知道如何制作这样一个虚构的Silverlight控件。

任何想法?或者关于如何更好地做到这一点的建议?

回答

2

我建议采用更多的AJAXy方法:让JS请求XAML,然后运行时将XAML从服务器返回后插入控件(请参阅HTML桥)。这样你的控制可以做一个很好的动画/转换到新的显示。

不过,你可以做你的目标是什么在:

  • 巴掌Silverlight server control到你的更新面板。
  • 写一个aspx页面生成XAML(更改文档类型,使事情变得更容易)
  • 点在.aspx页面中Silverlight的服务器控件:

    ... ASP:Silverlight的 ID =“Xaml1 “ runat =”server“ Source =”〜/ ClientBin/myXAMLPage.aspx“ MinimumVersion =”2.0。30523" WIDTH = “100%” HEIGHT = “100%”>

  • 触发在UpdatePanel做的,每当用户点击您的按钮的事情。

现在,每当用户点击一个按钮,更新面板(包含Silverlight控件)将被渲染,并且SL控件将请求XAML文件并渲染它发现的内容。

请注意,此方法使用XAML文件实例化控件。您将无法在Silverlight中使用托管代码f您需要托管代码,而不是在Source中指定“myXAMLPage.aspx”页面,指定您的.xap文件,然后使用initparam指定“myXAMLPage.aspx”。在你的Silverlight应用程序中,下载xaml文件(WebClient或其他),然后使用XamlReader.Load加载并显示它。

心连心, 埃里克

0

我建议你下载ASP.NET Silverlight服务器控件。有关此控件的更多信息,请参见here.通常,将编译后的XAM文件放在BIN目录中,然后将XAML链接到asp:Silverlight控件。他照顾其余的人。另外,可以使用asp:Silverlight的输入参数集合将一些参数传递给Silverlight。这是一个繁琐的方法,但它的工作原理。

+0

我看不出这将有助于在所有。它仍然需要一个.xap文件,它由(除其他外)静态.xaml和.xaml.cs文件组成;这些都不让我通过myPage.aspx.cs代码隐藏设置XAML内容。 – Domenic 2009-06-23 13:03:20

0

我可能是错的 - 在这个问题作为一个WPF开发者,而不是一个Silverlight开发者的到来,但在WPF可以创建和插入控件到代码中的XAML。

Label myLabel = new Label(); // Create a new control 
myLabel.Text = "Hello Wirral"; // Change some of its properties 
MyContainingPanel.Children.Add(myLabel); // Add it to an existing container 
+0

我想这个问题是我没有任何访问权限,例如,我的Page_Load方法适用于任何控件,如MyContainingPanel(或MyFictionalSilverlightControl)。 – Domenic 2009-06-24 12:33:55

0

真正简单的解决方案就是仅仅在silverlight中进行表格/数据演示。然后使用webservice将数据提供给您的Silverlight应用程序。

我敢肯定,MS完全同意这一点。

否则(你自找的):

与您提供理想的解决方案的问题是,ASP的抽象。Net隐藏了数据双重发布的实际情况,以及在客户端Silverlight应用程序本身可以很好地完成客户端界面时构建客户端界面:

步骤1 - 将HTML发送到嵌入数据的客户端

步骤2 - 初始化一个客户端应用(Silverlight应用程序)

步骤3 - 按按钮调用GenerateXamlFromData在服务器上

步骤4 - 获取相同的数据作为第1步中,然后创建一些XAML中从它

步骤5 - 通过它回到浏览器

步骤6 - 呼叫在Silverlight应用程序的方法来设置的Xaml

步骤3-5是完全冗余的。在客户端上,您已经拥有了数据和一些能够随时创建图表的Silverlight应用程序。

如果有该表是在HTML的绝对要求,我会解决的方式是:

让您的数据非HTML。使用XML/XSLTransform,JSON/javascript/JQuery或任何您最喜爱的客户端转换来呈现它。 Webservices,无论如何。关键的是你在这里打开你的网页,http发回数据并在飞行中创建你的html表格。然后将相同的数据传给你silverlight应用程序,并让它创建图表。

您的silverlight应用程序可以通过简单的对象创建动态构建图表。如果你真的喜欢用铅笔戳自己的眼睛,你仍然可以动态地建立Xaml字符串,并用它们来创建图表对象,这是一种简单的方法来获得Xaml-Nazi的StackOverflow徽章

还有解决你的问题的另一种方法,如果你真的想要你可以通过Sivlerlight应用程序的HTML表格并从中提取数据。一般来说,除非你做了一些真正愚蠢的html表格符合XML,所以只需将其加载到XDocument中即可。

至于你描述的简单方法,afaik是不可能的atm。也许有一天它会成为现实,但说实话它永远不会是一个好的解决方案,它只是为想要快速和肮脏的应用程序入侵的人提供的解决方案。

+0

我很困惑这篇文章,因为我从来没有提到一个HTML表格。我实际上在做的是从远程服务器收集数据---这就是this.GenerateXamlFromData()所做的---并希望将其变成图表。所以真的就像1)发送HTML到客户端,并带有一个按钮“给我一个图表”; 3)按下按钮; 4)从远程服务器获取新数据并从中创建XAML; 5,6)和以前一样。 – Domenic 2009-06-24 12:33:02

+0

但是这听起来像你所说的是我需要将一些荒谬的东西拼凑在一起,例如将生成的XAML AJAX化为隐藏文本字段,然后将一些JavaScript插入到AJAX onreadystatechanged中插入到Silverlight控件中(因为JavaScript是操纵显然,Silverlight控件)。 虽然你在开头提到的选择可能是最好的。也就是让按钮(这实际上是对整个登录/调整参数/单击按钮过程的简化)完全是Silverlight XAP的一部分。 – Domenic 2009-06-24 12:36:56

相关问题