Silverlight将数组传递给网页的对话框参数

本文关键字:网页 对话框 参数 数组 Silverlight | 更新日期: 2023-09-27 18:01:47

我有下面一行代码在c# (Silverlight)中打开一个网页模态对话框:

var so = (ScriptObject)HtmlPage.Window.Invoke(
    "showModalDialog", 
    modalWindowUrl, 
    dialogArgs, 
    "dialogWidth:600px;dialogHeight:600px;");

现在,在我正在显示的页面上调用类似于以下的代码,我需要确保它获得我试图传递的值(这是一个我无法控制的MSCRM网页):

dialogArgs.items <-- will be an array I pass in
dialogArgs.items[i].getAttribute("oid") <-- will return something
dialogArgs.items[i].getAttribute("otype") <-- will return something
dialogArgs.items[i].values <-- will return something

我试图发送的(从我的c#代码)是这样的:

dialogArgs = @"{items:[{oid:" + id + ",otype:" + type + "}]}";

将产生一个JSON字符串…但我猜这只是作为JavaScript中的字符串,而不是JSON对象。

你知道我该怎么做吗?

附注:

  • 我不能让IE调试这个调用产生的模态对话框。我可以得到调试工具显示,但它不会附加到页面,因为它不能刷新它。
  • 我无法控制这个模态对话框。这是一个使用MS Dynamics CRM显示的页面。由于这个原因,我不能用JavaScript或任何东西来测试东西。

Silverlight将数组传递给网页的对话框参数

看起来我赢得了风滚草奖!真不敢相信这种情况有多罕见。这个解决方案非常简单,但没有详细的文档记录,所以我花了一些时间去寻找。我想在这里分享一下。

首先,在互联网上快速搜索一下,我们可以使用以下命令设置:

var dialogArgs = HtmlPage.Window.CreateInstance("Object");

得到一个ScriptObject。属性:

dialogArgs.SetProperty("items", items);
设置数组和项的一些代码应该看起来像这样(我刚刚为这个例子创建了一个新的GUID):
var item = HtmlPage.Window.CreateInstance("Object");
item.SetProperty("oid", Guid.NewGuid()); 
item.SetProperty("otype", "account"); 
var items = HtmlPage.Window.CreateInstance("Object");
items.SetProperty(0, item);

最后,像这样将对象直接传递到对话框中:

var so = (ScriptObject)HtmlPage.Window.Invoke("showModalDialog", lookUpWindow, dialogArgs, "dialogWidth:600px;dialogHeight:600px;");