1

我有以下代码行在 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 或任何东西来测试东西。
4

1 回答 1

1

看来我为此获得了风滚草奖!不敢相信这种情况似乎多么罕见。解决方案最终变得非常简单,但没有很好的记录,所以我花了一段时间才找到。以为我会在这里分享。

首先,通过互联网快速搜索显示我们可以使用以下方法进行设置:

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;");
于 2013-03-12T12:09:22.827 回答